Menu

Expand
Classifique esta página:

Enviar mensagens SMS e MMS da ESP8266 em C++

Hoje, vamos convencer uma ESP8266 a enviar mensagens MMS e SMS usando C++ e o IDE Arduino. Você precisará de uma ESP-8266 configurada para o IDE Arduino, uma conexão serial (provavelmente com um adaptador serial para USB ou módulo integrado) e uma rede sem fio aberta, WEP ou WPA (1 ou 2) amigável.

Continue lendo, vamos mesclar a Internet of Things com a API da Twilio!

Fazer login ou inscrever-se em uma conta da Twilio

Crie uma nova conta da Twilio (inscreva‐se para uma versão de avaliação gratuita da Twilio aqui) ou entre na sua conta existente da Twilio.

Encontrar ou comprar um número compatível com SMS (e MMS)

Para esta demonstração, você precisará usar um número habilitado para SMS e MMS ou adquirir um novo número com os recursos necessários.

Primeiro, entre no console da Twilio. Em segundo lugar, selecione a seção hash tag/Phone Numbers (números de telefone) ("#") no lado esquerdo e navegue até seus números ativos atuais.

Em "Capabilities" (Recursos), você verá as funções que poderá usar com os números de telefone da Twilio. Para este artigo, você precisará de números com recursos SMS ou ambos SMS e MMS.

Se você não possui atualmente um número de telefone com SMS ou MMS, precisará adquirir um. Depois de navegar até o link "Buy a Number" (Comprar um número), clique na caixa de seleção SMS e, opcionalmente, MMS.

Buy a Number.png

Pré‐requisitos para este guia ESP8266 MMS e SMS em C++

A ESP8266 da Espressif, às vezes encontrada em placas que custam apenas US$ 2, é uma base incrível para o seu projeto de IoT. Como ela oferece suporte para TLS 1.2, estamos animados em compartilhar um exemplo de envio de mensagens usando a ESP8266 e a API da Twilio.

O desenvolvimento de hardware apresenta mais variáveis do que o desenvolvimento de software. Faremos o possível para ajudar você durante o estágio de configuração. Embora não possamos testar todas as configurações, comente se você tiver problemas. Nós, e talvez outros leitores, faremos o nosso melhor para ajudar a romper qualquer obstáculo.

Seleção de placa

Embora seja impossível enumerar cada variação de placa ESP8266 que funcionaria com este guia, o repositório para Arduino em ESP8266 tem uma boa lista de placas testadas. Sugerimos que você selecione uma dessas se ainda não escolheu uma placa de desenvolvimento. As variantes ESP-8266 12-E, como esta, funcionam bem.

Quando construímos isso pela primeira vez, usamos um Sparkfun Thing e o breakout FTDI básico do Sparkfun para programação. A Thing sobrecarrega o pino DTR e não funciona ao programar e conectar ao monitor serial. Para a maioria das placas, você não precisa tocar nos #define seriais no código.

Mas se fizer isso: você pode desativar ou ativar o software serial alterando o #define USE_SOFTWARE_SERIAL em Twilio_ESP8266_Example.ino.

IDE Arduino

O uso do IDE Arduino com a ESP8266 nos ajuda a eliminar algumas das variáveis inerentes a esse tipo de projeto. A conexão do Arduino ESP-8266 inclui a cadeia de ferramentas Xtensa gcc, fornece as bibliotecas do Arduino e facilita a programação de ESP-8266.

Se você optar por reescrever o código para evitar o ambiente Arduino assumido (talvez para o SDK da Espressif), as etapas mais importantes serão eliminar as dependências das strings do Arduino e garantir que você se conecte a api.twilio.com:443 usando TLS 1.2. Isso está além do escopo deste guia, mas compartilhe qualquer sucesso que você tenha nos comentários.

Construir o exemplo de MMS e SMS da ESP8266

(Observe que este projeto foi estendido no recebimento e resposta de mensagens do guia da ESP8266, aqui)

Depois de clonar este projeto do nosso repositório do GitHub, você terá que coletar algumas credenciais antes de enviar sua primeira mensagem. Na parte superior do Twilio_ESP8266_Example.ino configuramos vários globais para conectar à sua rede Wi-Fi, verificando a assinatura SHA1 de api.twilio.com ( vamos observar a verificação de CA na ESP8266) e enviando mensagens com sua conta da Twilio.

Observe que incorporar suas credenciais em um dispositivo de hardware só é aceitável para prototipagem e quando você sempre reterá a posse física de seu dispositivo. Se o seu dispositivo estiver em campo, você deverá usar chaves revogáveis ou outra autenticação reversível.

Esta é a seção que você precisará editar:

Loading Code Sample...
        
        
        Carregar credenciais da Twilio e Wi‑Fi do console da Twilio e sua rede na ESP8266

        Configurar credenciais na ESP8266

        Carregar credenciais da Twilio e Wi‑Fi do console da Twilio e sua rede na ESP8266

        Depois disso, construir o exemplo deve ser tão simples quanto pressionar o botão "Upload" no IDE Arduino.

        Se tudo correr bem, você deverá receber uma mensagem de texto com o conteúdo da variável message_body. Caso contrário, incluímos um código de exemplo para depurar com SoftwareSerial. Dependendo da sua placa e da configuração, provavelmente você precisará alterá‐lo ou usar a biblioteca Serial padrão. Estas são as primeiras etapas de uma sessão de depuração de exemplo (bem‐sucedida) com SoftwareSerial:

        Connected to WiFi, IP address: 
        192.168.1.155
        Connecting to host api.twilio.com
        Certificate fingerprints match.
        Sending http POST: 
        POST /2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages HTTP/1.1
        Authorization: Basic BASE64ENCODEDSTRINGHERE
        Host: api.twilio.com
        Cache-control: no-cache
        User-Agent: ESP8266 Twilio Example
        Content-Type: application/x-www-form-urlencoded
        Content-Length: 72
        Connection: close
        
        To=+18005551212&From=+18005551212&Body=Hello+from+Twilio+and+the+ESP8266
        

        Se você tiver cuidado, o motivo mais comum para a falha da mensagem é porque o certificado está atualizado. Esta próxima seção explica como atualizar a impressão digital.

        Como lidar com a falha da mensagem

        Todos os anos, api.twilio.com atualiza seu certificado, o que significa que você tem uma nova impressão digital para atualizar. Você pode encontrar a nova impressão digital de algumas maneiras, mas duas rápidas estão usando um navegador ou openssl na linha de comando de um sistema *NIX.

        Encontrar a impressão digital api.twilio.com em um navegador da Web

        Para localizar a impressão digital a partir de um navegador da Web, no computador ou laptop, acesse api.twilio.com. Inspecione o certificado para *.twilio.com e role para baixo até a impressão digital SHA-1.

        Veja como fica no Chrome (captura de tela em julho de 2020):

        SHA-1 fingerprint for api.twilio.com in Chrome

        Copie os caracteres hexadecimais e adicione‐os a linha const char fingerprint[] = no arquivo .ino.

        Localizar a impressão digital api.twilio.com na linha de comando

        Como alternativa, se você tiver o openssl em seu sistema, poderá obter a impressão digital sem abrir um navegador. Execute a seguinte linha na linha de comando:

        openssl s_client -connect api.twilio.com:443 < /dev/null 2>/dev/null | openssl x509 -fingerprint -noout -in /dev/stdin | sed -En "s/SHA1 Fingerprint=//p" | sed "s/:/ /g"

        O resultado que você obtém será assim:

        BC B0 1A 32 80 5D E6 E4 A2 29 66 2B 08 C8 E0 4C 45 29 3F D0

        Copie os caracteres hexadecimais e adicione‐os a linha const char fingerprint[] = no arquivo .ino.

        Enviar uma mensagem com a ESP8266

        Como atingiremos diretamente a API REST da Twilio, esse código tem algumas semelhanças superficiais com nossos exemplos de SMS em C e C++. Obviamente, sem uma biblioteca como a libcurl abstraindo os detalhes mais sutis, temos que escrever algum código de nível inferior. Você notará que incluímos o código para se conectar a uma rede Wi‐Fi e verificar a assinatura SHA1 de api.twilio.com.

        No entanto, mais rapidamente, estamos criando um HTTP POST manualmente:

        Loading Code Sample...
              
              
              Manually crafting a HTTP POST on the ESP8266 in order to send a SMS or MMS.

              Sending a SMS or MMS with the ESP8266 in C++

              Manually crafting a HTTP POST on the ESP8266 in order to send a SMS or MMS.

              Também precisamos fazer várias outras coisas que não são necessárias (ou abstraídas) no desktop. Você vai observar que incluímos código para codificar em base64 seu ACCOUNT_SID e AUTH_TOKEN para autenticação básica HTTP. Além disso, incluímos as funções de codificação e decodificação do URL de Steve Nelson para evitar caracteres especiais no corpo de SMS ou MMS. Certifique‐se de que seu aplicativo tenha funções semelhantes e que sua própria IoT funcionará corretamente na primeira vez.

              Da Internet of Things ao bolso de todos com a Twilio

              A ESP8266 é um grande chip que pode atuar como o cérebro do seu próximo projeto de IoT, mesmo sem muito silício externo. Se você gostaria de adicionar conectividade telefônica ao seu próximo projeto, mas um computador de placa única *NIX é muito pesado, é bom saber que você tem alternativas.

              Para o que quer que você esteja construindo em seguida, uma ferramenta de monitoramento, um wearable de compra obrigatória, um produto de automação residencial, adicione interoperabilidade telefônica de forma barata (e com segurança razoável) com ESP8266 e a API da Twilio.

              Paul Kamp Kevin Segovia Daniel Erazo
              Classifique esta página:

              Precisa de ajuda?

              Às vezes, todos nós precisamos; a programação é difícil. Receba ajuda agora da nossa equipe de suporte, ou confie na sabedoria da multidão navegando pelo Stack Overflow Collective da Twilio ou buscando a tag Twilio no Stack Overflow.

              Loading Code Sample...
                    
                    
                    

                    Obrigado pelo seu feedback!

                    Selecione o(s) motivo(s) para seu feedback. As informações adicionais que você fornece nos ajudam a melhorar nossa documentação:

                    Enviando seu feedback...
                    🎉 Obrigado pelo seu feedback!
                    Algo deu errado. Tente novamente.

                    Obrigado pelo seu feedback!

                    thanks-feedback-gif