跳转至

TinyGSM: 一个用于GSM模块的小型Arduino库,可以正常工作

一个用于GSM模块的小型Arduino库,可以使用。

项目地址:https://github.com/vshymanskyy/TinyGSM

GitHub version Build status GitHub issues GitHub wiki GitHub stars License

如果你喜欢TinyGSM-给它一颗星星,或者fork它,贡献力量!

您也可以加入我们的聊天:

Arduino客户端接口支持

这个库很容易与许多使用以太网或WiFi的草图集成。提供了PubSubClient(MQTT)、Blynk、HTTP客户端和文件下载示例。

examples

资源占用很小

Arduino Uno的完整WebClient示例(通过软件序列号)占用很少的资源:

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.

在类似的场景中,Arduino GSM库使用15868字节(49%)的闪存和1113字节(54%)的RAM。TinyGSM还轻轻地从调制解调器中提取数据(只要可能),因此它可以在非常小的RAM上运行。现在,你有更多的空间来做实验。

支持的模块

  • SIMCom SIM800系列(SIM800A、SIM800C、SIM800L、SIM800H、SIM808、SIM868)
  • SIMCom SIM900系列(SIM900A、SIM900D、SIM908、SIM968)
  • SIMCom WCDMA/HSPA/HSPA+模块(SIM5360、SIM5320、SIM5300E、SIM5300E/A)
  • SIMCom LTE模块(SIM7100E、SIM7500E、SIM7500A、SIM7600C、SIM7600E)
  • SIMCom SIM7000E/A/G CAT-M1/NB-IoT Module
  • AI-Thinker A6, A6C, A7, A20
  • ESP8266(AT命令接口,类似于GSM调制解调器)
  • Digi XBee WiFi和蜂窝网络(使用XBee命令模式)
  • Neoway M590
  • u-blox2G、3G、4G和LTE Cat1蜂窝调制解调器(许多模块包括LEON-G100、LISA-U2xx、SARA-G3xx、SARA-U2xx、TOBY-L2xx、LARA-R2xx、MPCI-L2xx)
  • u-bloxLTE-M/NB-IoT调制解调器(SARA-R4xx,SARA-N4xx,但不是SARA-N2xx)
  • Seguans Monarch LTE Cat M1/NB1(VZM20Q)
  • Quectel BG96
  • Quectel M95
  • Quectel MC60(阿尔法)

支持的开发板及或模块

  • Arduino MKR GSM 1400
  • GPRSbee
  • Microduino GSM
  • Adafruit FONA(小型手机GSM转接)
  • Adafruit FONA 800/808防护罩
  • Industruino GSM
  • RAK WisLTE(阿尔法)
  • ... 其他模块,基于支持的调制解调器。有些板需要特殊配置。

以后可能会支持更多调制解调器:

  • Quectel M10, UG95
  • SIMCom SIM7020
  • Telit GL865
  • ZTE MG2639
  • Hi-Link HLK-RM04

观看此回购以获取新的更新!当然,我们欢迎大家的贡献;)

Features

Data connections

  • TCP(HTTP,MQTT,Blynk,…)所有模块都支持TCP连接大多数模块支持多个同时连接:A6/A7-8 ESP8266-5 Neoway M590-2 Quectel BG96-12 Quectel M95-6 Quectel MC60/MC60E-6 sequals Monarch-6 SIM 800/900-5 SIM 5360/5320/5300/7100-10 SIM7000-8 sim7500/7600/7800-10u-blox2G/3G-7u-bloxSARAR4/N4-7 Digi XBee-仅支持1个连接!
  • 任何模块都不支持UDP,尽管这可能是某一天
  • SSL/TLS(HTTPS)支持:SIM800、u-Blox、XBee cellular、ESP8266和Sequans Monarch注意:只有某些设备型号或固件修订版具有此功能(SIM8xxR14.18、A7等),尚不支持:Quectel调制解调器、SIM7000、SIM 5360/5320/7100、SIM 7500/7600/7800不支持:SIM900、A6/A7、Neoway M590、XBee WiFi-Like-TCP,大多数模块支持同时连接TCP和SSL连接通常可以混合到可能的连接总数

USSD

  • 发送USSD请求和解码7,8,16-bit响应支持:所有SIMCom调制解调器,Quectel调制解调器,大多数u-blox不可能在:XBee,u-blox萨拉R4/N4,ESP8266(显然)

SMS

  • 所有蜂窝模块仅支持发送短消息,不支持接收

Voice Calls

  • 支持:SIM800/SIM900,A6/A7,Quectel调制解调器,u-blox
  • 尚不支持:SIM7000、SIM5360/5320/7100、SIM7500/7600/7800、VZM20Q(Monarch)
  • 不可能在:XBee(任何类型),u-bloxSARA R4/N4,Neoway M590,ESP8266(显然)
  • 功能:拨号、挂断接听来电来电来电事件(响铃)DTMF发送DTMF解码

Location

  • GPS/GNSS SIM808,SIM7000,SIM7500/7600/7800,BG96,u-blox注意:u-blox芯片没有嵌入式GPS-此功能仅在辅助GPS通过I2C连接到主蜂窝芯片时有效
  • GSM定位服务SIM800,SIM7000,Quectel,u-blox

Credits

  • 主要作者/撰稿人:vshymansky SRGDamia1
  • SIM7000:
  • captFuture
  • Seguans Monarch:无向性设计
  • Quectel M9C60
  • V1pr
  • Quectel M95复制版
  • 其他贡献者:https://github.com/vshymanskyy/TinyGSM/graphs/contributors

开始

第一步

  1. 使用您的手机:-禁用SIM卡上的PIN码-检查您的余额-检查APN、User、Pass是否正确以及您是否有互联网
  2. 确保SIM卡已正确插入模块
  3. 确保GSM天线牢固连接
  4. 确保模块至少有2A的稳定电源。
  5. 检查串行连接是否正常(建议使用硬件串行)使用此草图发送AT命令
  6. 试试WebClient示例

编写自己的代码

代码的一般流程应该是:

  • 定义您正在使用的模块(只选择一个)即#define TINY_GSM_MODEM_SIM800
  • 包括TinyGSM#include <TinyGsmClient.h>
  • 创建TinyGSM调制解调器实例TinyGsm modem(SerialAT);
  • 为单个连接创建一个或多个TinyGSM客户机实例,使用TinyGsmClient client(modem);TinyGsmClientSecure client(modem);(在支持的模块上)用于多个连接(在支持的模块上)使用:TinyGsmClient clientX(modem, 0);TinyGsmClient clientY(modem, 1);等或TinyGsmClientSecure clientX(modem, 0);TinyGsmClientSecure clientY(modem, 1);等安全和不安全的客户端通常在使用多个连接时混合使用。可能的连接总数因模块而异
  • 开始串行通信,并根据需要设置所有管脚,以便为模块供电并使其充分发挥功能。这些例子试图猜测模块的波特率。在工作代码中,您应该使用设置波特率。
  • 等待模块准备就绪(可能长达6秒,具体取决于模块)
  • 初始化调制解调器modem.init()modem.restart()重新启动通常比初始化时间长,但可确保模块没有延迟连接
  • 如有必要,请解锁您的SIM卡:modem.simUnlock(GSM_PIN)
  • 如果使用WiFi,请指定SSID信息:modem.networkConnect(wifiSSID, wifiPass)网络注册应在蜂窝模块上自动进行
  • 等待网络注册成功modem.waitForNetwork(600000L)
  • 如果使用蜂窝网络,请在网络modem.gprsConnect(apn, gprsUser, gprsPass)(或简单地modem.gprsConnect(apn))上成功注册后建立GPRS或EPS数据连接。相同的命令用于GPRS或EPS连接如果使用Digi品牌的cellular XBee,则必须在等待网络之前指定您的GPRS/EPS连接信息。这只适用于Digi手机XBees!对于所有其他蜂窝模块,请在网络注册后使用GPRS连接功能。
  • 连接TCP或SSL客户端client.connect(server, port)
  • 把你的资料发出去。

如果您有任何问题:

  1. 阅读整个自述(你正在看!),特别是下面的故障排除部分。
  2. 有些板需要特殊配置。
  3. 尝试运行诊断草图
  4. 检查此处突出显示的主题
  5. 如果您有任何问题,请在我们的Gitter聊天中发布

它是如何工作的?

许多GSM调制解调器、WiFi和无线电模块都可以通过串行发送AT命令来控制。TinyGSM知道要发送哪些命令,以及如何处理AT响应,并将其封装到标准的Arduino客户机接口中。

API Reference

对于GPRS数据流,此库提供标准的Arduino客户端接口。有关其他功能,请参考此示例草图

Troubleshooting

确保数据和电源连接稳定

大多数模块需要高达2A才能正确连接到网络。这是4倍什么是“标准”USB将提供!改善电源实际上解决了很多情况下的稳定性问题!

  • 阅读有关为模块供电的信息。
  • 电线要尽量短
  • 考虑将它们焊接以获得稳定的连接
  • 不要将电线放在噪声信号源(降压转换器、天线、振荡器等)旁边
  • 如果所有其他功能都正常,但您无法连接到网络,请检查您的电源!

中断的初始配置

有时(尤其是在使用AT命令时),模块配置可能会变得无效。这可能会导致以下问题:

  • 无法连接到GPRS网络
  • 无法连接到服务器
  • 发送/接收的数据包含无效字节
  • etc.

要将模块恢复为出厂默认值,请使用以下草图:文件->示例->TinyGSM->工具->FactoryReset

在某些情况下,您可能需要设置初始APN才能连接到蜂窝网络。如果无法在网络上注册,请尝试使用gprsConnect(APN)函数设置初始APN。您可能需要在注册后再次设置APN。(在大多数情况下,您应该在registration.之后设置APN)

Diagnostics sketch

使用此草图可以帮助诊断SIM卡和GPRS连接问题:文件->示例->TinyGSM->工具->诊断

如果诊断失败,请取消对此行的注释以从库中输出一些调试注释:

#define TINY_GSM_DEBUG SerialMon

在任何自定义代码中,TINY_GSM_DEBUG必须在包含TinyGSM库之前定义。

如果在库调试中看不到任何明显的错误,请使用StreamDebugger将整个AT命令序列复制到主串行端口。在诊断示例中,只需取消注释行:

#define DUMP_AT_COMMANDS

在自定义代码中,可以添加以下截图:

#ifdef DUMP_AT_COMMANDS
  #include <StreamDebugger.h>
  StreamDebugger debugger(SerialAT, SerialMon);
  TinyGsm modem(debugger);
#else
  TinyGsm modem(SerialAT);
#endif

Web请求格式问题-“但它适用于邮递员”

此库打开到服务器的TCP(或SSL)连接。在OSI模型中,这是第4层(或SSL的第5层)。HTTP(GET/POST)、MQTT和您可能希望使用的大多数其他函数都在第7层运行。这意味着您需要手动编写顶层代码,或者使用另一个库(如HTTPClient或PubSubClient)为您编写代码。像PostMan这样的工具也显示第7层,而不是TinyGSM这样的4/5层。如果您成功地连接到服务器,但得到的响应是“错误的请求”(或没有响应),则问题可能是您的格式。下面是一些手动编写第7层(特别是HTTP请求)的提示:

  • 看看“WebClient”示例
  • 确保包含所有必需的标题。如果您正在使用PostMan进行测试,请确保您un-hide并查看"auto-generated“标题;您可能会惊讶于它们有多少。
  • 使用client.print("..."),或client.write(buf, #),甚至client.write(String("...")),而不是client.write("...")来帮助防止文本一次发送一个字符(打字机风格)
  • client.print(String("GET ") + resource + " HTTP/1.1\r\n");而不是client.print("GET "); client.print(resource); client.println(" HTTP/1.1")将每个标题或行的整个内容包含在单个字符串或print语句中
  • 确保在最后一个标题和任何POST请求的内容之间有一个完全空白的行。在最后一个头文件client.print("....\r\n\r\n")中添加两行代码,或者添加一个额外的client.println()这是一个HTTP要求,很容易错过。

SoftwareSerial problems

当使用SoftwareSerial(在Uno、Nano等上)时,速度115200可能无法工作。试着选择57600,38400,甚至更低——最适合你的。在某些情况下,9600是不稳定的,但使用38400有助于等。确保在草图中设置正确的TX/RX引脚。请注意,并非每个Arduino引脚都可以用作TX或RX引脚。在这里和这里阅读更多关于软串行选项和配置的信息。

ESP32 Notes

HardwareSerial

使用ESP32HardwareSerial时,可能需要为.begin()调用指定其他参数。请参考此评论。

HttpClient

您将无法使用ESP32核心1.0.2编译HttpClient或HttpsClient示例。升级到1.0.3,降级到版本1.0.1或使用WebClient示例。

SAMD21

使用SAMD21-based板时,可能需要使用sercom uart端口而不是Serial1。请参考此评论。

谷歌科技IOT-GA6对AI-ThinkerA6混乱

原来,goouu-TechIOT-GA6与AI-ThinkerA6不同。不幸的是IOT-GA6还没有开箱即用的支持。有一些提示IOT-GA6固件可能会更新以匹配A6。。。请参阅本主题。


License

这个项目是根据GNU的通用公共许可证发布的(LGPL-3.0)