TinyGSM: 一个用于GSM模块的小型Arduino库,可以正常工作
一个用于GSM模块的小型Arduino库,可以使用。
项目地址:https://github.com/vshymanskyy/TinyGSM
如果你喜欢TinyGSM-给它一颗星星,或者fork它,贡献力量!
您也可以加入我们的聊天:
Arduino客户端接口支持
这个库很容易与许多使用以太网或WiFi的草图集成。提供了PubSubClient(MQTT)、Blynk、HTTP客户端和文件下载示例。
资源占用很小
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
开始
第一步
- 使用您的手机:-禁用SIM卡上的PIN码-检查您的余额-检查APN、User、Pass是否正确以及您是否有互联网
- 确保SIM卡已正确插入模块
- 确保GSM天线牢固连接
- 确保模块至少有2A的稳定电源。
- 检查串行连接是否正常(建议使用硬件串行)使用此草图发送
AT
命令 - 试试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)
- 把你的资料发出去。
如果您有任何问题:
- 阅读整个自述(你正在看!),特别是下面的故障排除部分。
- 有些板需要特殊配置。
- 尝试运行诊断草图
- 检查此处突出显示的主题
- 如果您有任何问题,请在我们的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)