Skip to content

用 SIM 4G 模块在 Arduino 上发送数据到 ThingsBoard ​

正文与示例代码来自原稿。思路:Arduino 串口控制 SIM 4G 模块,用 GPRS + HTTP POST 把遥测打到 ThingsBoard。

1、实现思路 ​

要使用 SIM 4G 模块在 Arduino 上发送数据到 ThingsBoard,可按下列步骤:

  1. 确认模块支持 GPRS(或等价蜂窝数据)
    需要靠蜂窝数据上网才能访问 ThingsBoard。若不支持数据业务,则无法按本方案上报。

  2. 把 SIM 4G 模块接到 Arduino
    按模块数据手册接电源、接地与 UART(示例用软串口 10/11 作 RX/TX)。注意电平(3.3V / 5V)与供电电流。

  3. 安装驱动 / 库
    按厂商说明安装驱动,并把所需库加入 Arduino IDE(本示例仅用到 IDE 自带的 SoftwareSerial)。

  4. 在 ThingsBoard 创建设备
    注册/登录 ThingsBoard,创建设备,复制设备 Access Token,后面填进 URL。

  5. 编写并上传 Arduino 代码(见下节)

  6. 串口监视器验证
    上传后打开串口监视器,观察模块 AT 回显与 HTTP 结果;再到设备遥测页确认是否有 temperature / humidity 等字段。

2、示例代码 ​

示例通过 AT 命令:附着 GPRS → 配 APN → 开承载 → HTTPINIT → 设置遥测 URL → 周期性 HTTPDATA + HTTPACTION POST JSON。

请把下面几处改成你的环境:

  • your_apn:运营商 APN
  • https://your-thingsboard-url:平台地址(公网可达)
  • YOUR_ACCESS_TOKEN:设备令牌
cpp
#include <SoftwareSerial.h>

SoftwareSerial sim4g(10, 11); // RX, TX

void setup()
{
  Serial.begin(9600);
  sim4g.begin(9600);
  delay(1000);

  sim4g.println("AT+CGATT=1"); // Attach to GPRS
  delay(1000);

  sim4g.println("AT+SAPBR=3,1,\"APN\",\"your_apn\""); // Set APN
  delay(1000);

  sim4g.println("AT+SAPBR=1,1"); // Open GPRS context
  delay(1000);

  sim4g.println("AT+HTTPINIT"); // Initialize HTTP session
  delay(1000);

  // ThingsBoard 设备遥测 HTTP API
  sim4g.println(
    "AT+HTTPPARA=\"URL\",\"https://your-thingsboard-url/api/v1/YOUR_ACCESS_TOKEN/telemetry\""
  );
  delay(1000);
}

void loop()
{
  String data = "{";
  data += "\"temperature\":25.0,";
  data += "\"humidity\":50.0";
  data += "}";

  String postRequest = "AT+HTTPDATA=" + String(data.length()) + ",10000";
  sim4g.println(postRequest);
  delay(1000);
  sim4g.println(data);
  delay(1000);

  sim4g.println("AT+HTTPACTION=1"); // HTTP POST
  delay(1000);

  sim4g.println("AT+HTTPREAD"); // Read HTTP response
  delay(1000);

  while (sim4g.available()) {
    Serial.write(sim4g.read());
  }

  delay(60000); // 每 60 秒上报一次
}

该代码连接 SIM 4G 并设置 APN,再把 JSON 遥测 POST 到 ThingsBoard。URL 与 Access Token 必须改成你自己的;示例字段为 temperature、humidity。

ThingsBoard 设备侧 HTTP 遥测路径一般为:

text
POST /api/v1/{ACCESS_TOKEN}/telemetry
Content-Type: application/json

3、上传与测试 ​

  1. 将代码上传到 Arduino。
  2. 打开串口监视器(波特率与 Serial.begin 一致,示例为 9600)。
  3. 确认 AT 回显正常、HTTPACTION 返回成功类状态。
  4. 在 ThingsBoard 设备 最新遥测 中查看是否出现上报字段。

补充(辅) ​

点说明
HTTPS不少模组对 HTTPS/证书支持有限;若 POST 失败,可先在内网用 http:// 验证链路,再查模组 SSL 应用文档
CONTENT 类型部分模组需额外 AT+HTTPPARA="CONTENT","application/json"
MQTT模组若支持 MQTT,也可直连 TB 1883/8883,主题如 v1/devices/me/telemetry;本篇按原稿走 HTTP
供电4G 发射瞬时电流大,建议模组独立供电并共地,避免 Arduino 口供电不稳导致掉网
APN必须与 SIM 运营商一致,否则 SAPBR 打不开

相关文章 ​