Uma pequena biblioteca Arduino para módulos GSM, que simplesmente funciona.
Se você gosta do TinyGSM - dê uma estrela ou dê um garfo e contribua!
Você também pode participar do nosso chat:
Esta biblioteca é fácil de integrar com muitos esboços que usam Ethernet ou WiFi. Exemplos de PubSubClient (MQTT) , Blynk , HTTP Client e File Download são fornecidos.
O exemplo completo do WebClient para Arduino Uno (via Software Serial) consome poucos recursos:
Sketch uses 15022 bytes (46%) of program storage space. Maximum is 32256 bytes.
Global variables use 574 bytes (28%) of dynamic memory, leaving 1474 bytes for local variables. Maximum is 2048 bytes.
A biblioteca Arduino GSM usa 15.868 bytes (49%) de Flash e 1.113 bytes (54%) de RAM em um cenário semelhante. O TinyGSM também extrai dados suavemente do modem (sempre que possível), para que possa operar com muito pouca RAM. Agora você tem mais espaço para seus experimentos.
Assista a este repositório para novas atualizações! E claro, contribuições são bem-vindas ;)
Conexões de dados
USD
SMS
Chamadas de voz
Localização
Créditos
AT
usando este esboçoO fluxo geral do seu código deve ser:
#define TINY_GSM_MODEM_SIM800
#include
TinyGsm modem(SerialAT);
TinyGsmClient client(modem);
ou TinyGsmClientSecure client(modem);
(em módulos suportados)TinyGsmClient clientX(modem, 0);
, TinyGsmClient clientY(modem, 1);
, etc ouTinyGsmClientSecure clientX(modem, 0);
, TinyGsmClientSecure clientY(modem, 1);
, etc.modem.init()
ou modem.restart()
modem.simUnlock(GSM_PIN)
modem.networkConnect(wifiSSID, wifiPass)
modem.waitForNetwork(600000L)
modem.gprsConnect(apn, gprsUser, gprsPass)
(ou simplesmente modem.gprsConnect(apn)
)client.connect(server, port)
Muitos modems GSM, WiFi e módulos de rádio podem ser controlados enviando comandos AT via Serial. O TinyGSM sabe quais comandos enviar e como lidar com as respostas AT, e agrupa isso na interface Arduino Client padrão.
Esta biblioteca está "bloqueando" toda a sua comunicação. Dependendo da função, seu código pode ficar bloqueado por muito tempo aguardando as respostas do módulo. Além do óbvio (ou seja, waitForNetwork()
), várias outras funções podem bloquear seu código por vários minutos . As funções gprsConnect()
e client.connect()
geralmente bloqueiam por mais tempo, especialmente em regiões de serviço mais pobres. O desligamento e reinicialização do módulo também podem ser bastante lentos.
Esta biblioteca não suporta nenhum tipo de "hardware" ou controles de nível de pinos para os módulos. Se você precisar ligar seu módulo ou redefini-lo usando algum tipo de sequência de pinos Alto/Baixo/Alto, você mesmo deverá escrever essas funções.
Para fluxos de dados GPRS, esta biblioteca fornece a interface Arduino Client padrão. Para funções adicionais, consulte este esboço de exemplo
A maioria dos módulos requer até 2A para se conectar corretamente à rede. Isso é 4x o que um USB “padrão” fornecerá! Melhorar a fonte de alimentação resolve problemas de estabilidade em muitos casos!
A maioria dos módulos suporta algum tipo de recurso de "bauding automático", onde o módulo tentará ajustar sua taxa de transmissão para corresponder ao que está recebendo. TinyGSM também implementa sua própria função de transmissão automática ( TinyGsmAutoBaud(SerialAT, GSM_AUTOBAUD_MIN, GSM_AUTOBAUD_MAX);
). Embora sejam muito úteis ao conectar-se inicialmente a um módulo e fazer testes, eles NÃO devem ser usados em nenhum tipo de código de produção. Depois de estabelecer a comunicação com o módulo, defina a taxa de transmissão usando a função setBaud(#)
e mantenha essa taxa.
Às vezes (especialmente se você jogou com comandos AT), a configuração do seu módulo pode se tornar inválida. Isso pode resultar em problemas como:
Para retornar o módulo aos padrões de fábrica , use este esboço: Arquivo -> Exemplos -> TinyGSM -> ferramentas -> FactoryReset
Em alguns casos, pode ser necessário definir um APN inicial para conectar-se à rede celular. Tente usar a função gprsConnect(APN)
para definir um APN inicial se você não conseguir se registrar na rede. Pode ser necessário configurar o APN novamente após o registro. (Na maioria dos casos, você deve definir o APN após o registro.)
A primeira conexão com um novo cartão SIM, um novo módulo ou em um novo local/torre pode demorar MUITO tempo - até 15 minutos ou mais, especialmente se a qualidade do sinal não for excelente. Se for sua primeira conexão, pode ser necessário ajustar o tempo de espera e possivelmente ir almoçar enquanto espera.
Se você conseguir abrir uma conexão TCP, mas a conexão for fechada antes de receber os dados, tente adicionar um cabeçalho keep-alive à sua solicitação. Alguns módulos (ou seja, o SIM7000 no modo SSL) descartarão imediatamente quaisquer dados não lidos quando o servidor remoto fechar a conexão - às vezes sem sequer avisar que os dados chegaram. Ao usar MQTT, para manter uma conexão contínua, pode ser necessário reduzir o intervalo de manutenção de atividade (PINGREQ/PINGRESP).
Use este esboço para ajudar a diagnosticar problemas de cartão SIM e conexão GPRS: Arquivo -> Exemplos -> TinyGSM -> ferramentas -> Diagnóstico
Se o diagnóstico falhar, remova o comentário desta linha para gerar alguns comentários de depuração da biblioteca:
# define TINY_GSM_DEBUG SerialMon
Em qualquer código personalizado, TINY_GSM_DEBUG
deve ser definido antes de incluir a biblioteca TinyGSM.
Se você não conseguir ver nenhum erro óbvio na depuração da biblioteca, use StreamDebugger para copiar toda a sequência de comandos AT para a porta serial principal. No exemplo de diagnóstico, simplesmente descomente a linha:
# define DUMP_AT_COMMANDS
No código personalizado, você pode adicionar este snippit:
# ifdef DUMP_AT_COMMANDS
# include < StreamDebugger.h >
StreamDebugger debugger (SerialAT, SerialMon);
TinyGsm modem (debugger);
# else
TinyGsm modem (SerialAT);
# endif
Esta biblioteca abre uma conexão TCP (ou SSL) com um servidor. No modelo OSI, essa é a camada 4 (ou 5 para SSL). HTTP (GET/POST), MQTT e a maioria das outras funções que você provavelmente deseja usar estão na camada 7. Isso significa que você precisa codificar manualmente a camada superior ou usar outra biblioteca (como HTTPClient ou PubSubClient) para fazer isso para você. Ferramentas como PostMan também mostram a camada 7, não a camada 4/5 como o TinyGSM. Se você estiver se conectando com sucesso a um servidor, mas obtendo respostas de "solicitação incorreta" (ou nenhuma resposta), o problema provavelmente está na sua formatação. Aqui estão algumas dicas para escrever a camada 7 (particularmente a solicitação HTTP) manualmente:
client.print("...")
, ou client.write(buf, #)
, ou mesmo client.write(String("..."))
, não client.write("...")
para ajudar a evitar que o texto seja enviado um caractere por vez (estilo máquina de escrever)client.print(String( " GET " ) + resource + " HTTP/1.1 rn " );
client.print( " GET " );
client.print(resource);
client.println( " HTTP/1.1 " )
client.print("....rnrn")
ou coloque um client.println()
extra Ao usar SoftwareSerial
(em Uno, Nano, etc), a velocidade 115200 pode não funcionar. Tente selecionar 57600 , 38400 ou até menos - aquele que funciona melhor para você. Em alguns casos, 9600 é instável, mas usar 38400 ajuda, etc. Certifique-se de definir os pinos TX/RX corretos no esboço. Observe que nem todo pino do Arduino pode servir como pino TX ou RX. Leia mais sobre as opções e configuração do SoftSerial aqui e aqui.
Ao usar ESP32 HardwareSerial
, pode ser necessário especificar parâmetros adicionais para a chamada .begin()
. Por favor, consulte este comentário.
Você não poderá compilar os exemplos HttpClient ou HttpsClient com o núcleo ESP32 1.0.2. Atualize para 1.0.3, faça downgrade para a versão 1.0.1 ou use o exemplo WebClient.
Ao usar placas baseadas em SAMD21, pode ser necessário usar uma porta sercom uart em vez de Serial1
. Por favor, consulte este comentário.
Acontece que Goouuu Tech IOT-GA6 não é o mesmo que AI-Thinker A6 . Infelizmente, o IOT-GA6 ainda não é compatível imediatamente. Existem algumas dicas de que o firmware IOT-GA6 pode ser atualizado para corresponder ao A6... Consulte este tópico.
Algumas versões do SIM800, mas não todas, suportam SSL. O suporte SSL depende da versão do firmware e do módulo individual. Os usuários tiveram níveis variados de sucesso no uso de SSL no SIM800, mesmo com firmware aparentemente idêntico. Se você precisar de SSL e ele não parecer estar funcionando no seu SIM800, tente um módulo diferente ou tente usar uma biblioteca SSL secundária.
Existem duas versões do código SIM7000, uma usando TINY_GSM_MODEM_SIM7000
e outra com TINY_GSM_MODEM_SIM7000SSL
. A versão TINY_GSM_MODEM_SIM7000
não suporta SSL , mas suporta até 8 conexões simultâneas. A versão TINY_GSM_MODEM_SIM7000SSL
suporta conexões SSL e não seguras com até 2 conexões simultâneas. Então, por que existem duas versões? A versão "SSL" utiliza os comandos de "aplicação" do SIM7000 enquanto a outra utiliza o "kit de ferramentas TCP-IP". Dependendo da sua região/firmware, um ou outro pode não funcionar para você. Experimente os dois e use o que for mais estável. Se você não precisa de SSL, recomendo começar com TINY_GSM_MODEM_SIM7000
.
Este projeto foi lançado sob a Licença Pública Geral Menor GNU (LGPL-3.0)