Arduino D1 使用mqtt 上传服务器数据 上传字符串
本实例 是自己做的服务器 用的mqtt进行数据传输 因为这个协议是长连接的 方便收发数据 mqtt是基于TCP的 Copa是基于UDP的 所以有的时候买的模块 不管是WIFI NB 有一点是自己要想清楚就是用的什么协议 万变不离其宗吗
这个就是自己上传mqtt 总结的案例 奈何 网上的案例 不加注释 很多都是只有他们的一个功能 不能复用 上传个字符串都难 这个还有几行代码没有搞清楚 但是也发现很多好案例 分享一下 可以参考
自己到时候要把 上传的几个必要条件写一下 总结
wemos d1 采集温度数据上传到mqtt服务器
https://blog.youkuaiyun.com/xiaobai2018/article/details/86656728
Arduino实现真正的物联网-通过MQTT服务器-两块板子远程通信
https://blog.youkuaiyun.com/qq_44350275/article/details/89406527
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const char* ssid = "你的路由器";
const char* password = "你的路由器密码";
const char* mqtt_server = "你要连接的服务器地址"; // 服务器地址
const int port = 1883;//服务器端口号
const char* topic_name = "你要上传消息的主题";
const char*client_id = "wemos001";//这个是板子的编号 我没有懂 但是不影响使用
unsigned long lastSend;
WiFiClient espclient;
PubSubClient client(espclient);
//获取传感器数据进行发送
void gettemp()
{
//上传的字符串进行拼接转义
String payload = "{\"type\":1,\"data\":[{\"index\":1,\"value\":6}]}";
char attributes[100];
payload.toCharArray( attributes, 100 );
client.publish(topic_name, attributes );
}
//初始化wifi
void setup_wifi(){
delay(10);
WiFi.begin(ssid,password);
while(WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print("...");
}
}
//连接服务器
void reconnect(){
while(!client.connected()){//如果没有连上
if (client.connect(client_id)){//接入时本设备id
Serial.println("connect success");
}else{
Serial.print("failed,rc=");
Serial.print(client.state());
Serial.print("try 5 seconds later");
delay(5000);
}
}
}
//设备初始化
void setup(){
Serial.begin(9600);
setup_wifi();
client.setServer(mqtt_server,port);
lastSend = 0;
}
void loop(){
reconnect(); //1.首先进行服务器的连接 因为这是循环函数 所以执行一次后判断就行了
if (millis() - lastSend > 10000){
gettemp();
lastSend = millis();
}
client.loop();
}