一个用于 GSM 模块的小型 Arduino 库,可以正常工作。
如果您喜欢TinyGSM - 给它一颗星,或者分叉它并做出贡献!
您还可以加入我们的聊天:
该库很容易与许多使用以太网或 WiFi 的草图集成。提供了PubSubClient (MQTT) 、 Blynk 、 HTTP Client和文件下载示例。
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 上运行。现在,您有更多的实验空间。
观看此存储库以获取新更新!当然,欢迎贡献;)
数据连接
美国SD
短信
语音通话
地点
制作人员
AT
命令您的代码的一般流程应该是:
#define TINY_GSM_MODEM_SIM800
#include
TinyGsm modem(SerialAT);
TinyGsmClient client(modem);
或TinyGsmClientSecure client(modem);
(在支持的模块上)TinyGsmClient clientX(modem, 0);
, TinyGsmClient clientY(modem, 1);
等或TinyGsmClientSecure clientX(modem, 0);
, TinyGsmClientSecure clientY(modem, 1);
, ETCmodem.init()
或modem.restart()
modem.simUnlock(GSM_PIN)
modem.networkConnect(wifiSSID, wifiPass)
modem.waitForNetwork(600000L)
modem.gprsConnect(apn, gprsUser, gprsPass)
(或简称modem.gprsConnect(apn)
)client.connect(server, port)
许多 GSM 调制解调器、WiFi 和无线电模块可以通过串行发送 AT 命令来控制。 TinyGSM 知道要发送哪些命令,以及如何处理 AT 响应,并将其包装到标准 Arduino 客户端接口中。
该库的所有通信都处于“阻塞”状态。根据功能的不同,您的代码可能会被阻塞很长时间以等待模块响应。除了明显的(即waitForNetwork()
)之外,其他几个函数可能会阻塞您的代码长达几分钟。 gprsConnect()
和client.connect()
函数通常阻塞时间最长,尤其是在服务较差的地区。模块关闭和重启也可能相当慢。
该库不支持模块的任何类型的“硬件”或引脚级控制。如果您需要使用某种高/低/高引脚序列打开或重置模块,则必须自己编写这些函数。
对于 GPRS 数据流,该库提供标准 Arduino 客户端接口。如需其他功能,请参考此示例草图
大多数模块需要2A 电流才能正确连接到网络。这是“标准”USB 所能提供的容量的 4 倍!改善供电其实很多时候就解决了稳定性问题!
大多数模块支持某种“自动波特率”功能,其中模块将尝试调整其波特率以匹配其接收的波特率。 TinyGSM 还实现了自己的自动波特率功能( TinyGsmAutoBaud(SerialAT, GSM_AUTOBAUD_MIN, GSM_AUTOBAUD_MAX);
)。虽然在最初连接到模块并进行测试时非常有用,但它们不应该在任何类型的生产代码中使用。与模块建立通信后,使用setBaud(#)
函数设置波特率并坚持使用该速率。
有时(特别是如果您使用 AT 命令),您的模块配置可能会变得无效。这可能会导致以下问题:
要将模块恢复为出厂默认值,请使用以下草图:文件 -> 示例 -> TinyGSM -> 工具 -> FactoryReset
在某些情况下,您可能需要设置初始 APN 才能连接到蜂窝网络。如果您无法在网络上注册,请尝试使用gprsConnect(APN)
函数设置初始 APN。注册后您可能需要重新设置APN。 (大多数情况下,您应该在注册后设置 APN。)
首次使用新 SIM 卡、新模块或在新位置/塔进行连接可能需要很长时间 - 长达 15 分钟甚至更长,特别是在信号质量不佳的情况下。如果这是您第一次转机,您可能需要调整等待时间,并可能在等待时去吃午餐。
如果您能够打开 TCP 连接,但在接收数据之前关闭连接,请尝试在您的请求中添加 keep-alive 标头。当远程服务器关闭连接时,某些模块(即 SSL 模式下的 SIM7000)将立即丢弃任何未读取的数据 - 有时甚至不会首先发出数据到达的通知。使用 MQTT 时,为了保持连续连接,您可能需要减少保持活动间隔 (PINGREQ/PINGRESP)。
使用此草图帮助诊断 SIM 卡和 GPRS 连接问题:文件 -> 示例 -> TinyGSM -> 工具 -> 诊断
如果诊断失败,请取消注释此行以从库中输出一些调试注释:
# define TINY_GSM_DEBUG SerialMon
在任何自定义代码中,必须在包含 TinyGSM 库之前定义TINY_GSM_DEBUG
。
如果在库调试中无法看到任何明显错误,请使用 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
该库打开到服务器的 TCP(或 SSL)连接。在 OSI 模型中,这是第 4 层(对于 SSL 来说是第 5 层)。 HTTP (GET/POST)、MQTT 以及您可能想要在第 7 层使用的大多数其他功能。这意味着您需要手动编码顶层或使用另一个库(如 HTTPClient 或 PubSubClient)来执行给你的。像 PostMan 这样的工具也显示第 7 层,而不是像 TinyGSM 那样显示第 4/5 层。如果您成功连接到服务器,但收到“错误请求”的响应(或无响应),则问题可能在于您的格式。以下是手动编写第 7 层(特别是 HTTP 请求)的一些技巧:
client.print("...")
或client.write(buf, #)
,甚至client.write(String("..."))
,而不是client.write("...")
来帮助防止文本一次发送一个字符(打字机风格)client.print(String( " GET " ) + resource + " HTTP/1.1 rn " );
client.print( " GET " );
client.print(resource);
client.println( " HTTP/1.1 " )
client.print("....rnrn")
或放入额外的client.println()
当使用SoftwareSerial
(在 Uno、Nano 等上)时,速度115200可能无法工作。尝试选择57600 、 38400甚至更低 - 最适合您的那个。在某些情况下, 9600不稳定,但使用38400会有所帮助,等等。请务必在草图中设置正确的 TX/RX 引脚。请注意,并非每个 Arduino 引脚都可以用作 TX 或 RX 引脚。在此处和此处阅读有关 SoftSerial 选项和配置的更多信息。
使用 ESP32 HardwareSerial
时,您可能需要为.begin()
调用指定其他参数。请参考这个评论。
您将无法使用 ESP32 core 1.0.2 编译 HttpClient 或 HttpsClient 示例。升级到 1.0.3、降级到版本 1.0.1 或使用 WebClient 示例。
当使用基于 SAMD21 的板时,您可能需要使用 sercom uart 端口而不是Serial1
。请参考这个评论。
事实证明, Goouuu Tech IOT-GA6与AI-Thinker A6并不相同。不幸的是,IOT-GA6 尚不支持开箱即用。有一些提示表明 IOT-GA6 固件可能会更新以匹配 A6...请参阅此主题。
SIM800 的某些版本(但不是全部)支持 SSL。是否支持 SSL 取决于固件版本和各个模块。即使固件明显相同,用户在 SIM800 上使用 SSL 也取得了不同程度的成功。如果您需要 SSL,但它似乎不适用于您的 SIM800,请尝试不同的模块或尝试使用辅助 SSL 库。
SIM7000 代码有两种版本,一种使用TINY_GSM_MODEM_SIM7000
,另一种使用TINY_GSM_MODEM_SIM7000SSL
。 TINY_GSM_MODEM_SIM7000
版本不支持SSL ,但最多支持8个同时连接。 TINY_GSM_MODEM_SIM7000SSL
版本支持 SSL和不安全连接,最多可同时连接 2 个。那么为什么会有两个版本呢? “SSL”版本使用SIM7000的“应用程序”命令,而另一个版本则使用“TCP-IP工具包”。根据您所在的地区/固件,其中之一可能不适合您。两者都尝试一下,然后使用更稳定的一个。如果您不需要 SSL,我建议从TINY_GSM_MODEM_SIM7000
开始。
该项目根据 GNU Lesser General Public License (LGPL-3.0) 发布