在物联网(IoT)开发中,常常会遇到需要将设备信息远程传送的需求。比如当设备的状态发生变化时(例如开/关状态、电量低、异常状态等),我们希望推送通知给用户。当安防类设备检测到入侵警报、烟雾警报时,需要立即推送警报通知给用户。还有些设备需要定期推送设备的能耗和或者采集的数据给用户,帮助用户了解设备的节能情况和监测数据详情。一个具体的例子:环境监测仪设备检测到温度、湿度、氧气浓度等环境指标超出用户设定的范围时,我们希望可以提醒用户。
那么物联网设备远程消息提醒有哪些常见实现方式呢?
第一种方式是服务器+APP的方式。这种方式需要拥有自己的移动端APP,还要搭建自己的服务器作为后端。开发难度大,开发周期长,只适合成规模的产品。
第二种方式是调用接口服务商的短信通知api。这种方式的开发复杂度要比第一种低得多,而且不需要依赖网络。但短信通知接口一般是按条收费,价格偏高。通知内容长度有限,无法传递复杂信息。
第三种方式是使用微信公众号加api调用的方式。这种方式是一种常用的较低成本的实现方式。但api的调用需要处理复杂的消息加密逻辑,或需要依赖微信提供的sdk开发。还要遵守微信的各种限制。
以上几种方式如果需要可以查找相关的资料来实现。本文介绍一种免费、实现简单、可多人通知、可传送多种消息的方式,这可能是最简单的实现方式。
这是一种基于webhook的消息推送方式。很多平台都提供的webhook消息接收的功能。例如钉钉、企业微信、飞书等。下面以钉钉+ESP32作为例子实现ESP32开发板向用户发送消息通知。
-
第一步:在你希望接收消息的钉钉群创建自定义机器人(需要在电脑端操作)
-




-
第二步:编写ESP32端程序,向上一步保存的URL发送消息(注意消息中要包含自定义的关键词,除了文本以外还可以发送链接等多种消息,可以@群内成员)。贴上Arduino程序:
#include <Arduino.h>
#include <WiFi.h>
#include <HTTPClient.h>
void sendMessageToDingTalk(const char* message);
// 替换为你的 Wi-Fi 名称和密码
const char* ssid = "myssid";
const char* password = "mypassword";
// 替换为你的钉钉群机器人的 Webhook URL
const char* webhook_url = "https://oapi.dingtalk.com/robot/send?access_token";
void setup() {
// 初始化串口通信
Serial.begin(115200);
// 连接 Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
}
void loop() {
// 发送消息到钉钉群机器人
sendMessageToDingTalk("123大家好,这是一条来自 ESP32 的测试消息。");
// 每隔 60 秒发送一次消息
delay(60000);
}
void sendMessageToDingTalk(const char* message) {
// 创建 HTTPClient 对象
HTTPClient http;
// 设置请求头
http.begin(webhook_url);
http.addHeader("Content-Type", "application/json");
// 构建 JSON 消息
String jsonMessage = "{\"msgtype\": \"text\", \"text\": {\"content\": \"" + String(message) + "\"}}";
// 发送 POST 请求
int httpResponseCode = http.POST(jsonMessage);
// 检查响应
if (httpResponseCode > 0) {
String response = http.getString();
Serial.println("HTTP Response code: " + String(httpResponseCode));
Serial.println("Response: " + response);
} else {
Serial.println("Error on sending POST: " + String(httpResponseCode));
}
// 关闭连接
http.end();
}
-
第三步:程序编译并烧录到ESP32。程序启动后可看到ESP32发来的消息

总结: 1、在钉钉群创建自定义机器人并获取webhookURL;
2、编程实现ESP32连接网络并向URL发送消息;
3、编译烧录和测试消息推送。
这种方式可以方便快捷实现物联网设备对用户的消息推送。这种方式在各种物联网产品测试阶段可以提高效率。实际使用中webhook地址需要设置为变量且需要通过一定的方式配置。由于群内添加机器人并获取webhook的过程对普通用户来说较为繁琐,以及依赖钉钉等工作协同软件,这种方式不适合面向个人用户的产品,仅适合面向企业用户的产品,尤其是与项目数据更新相关的产品或办公室用产品。
630

被折叠的 条评论
为什么被折叠?



