手机网站建设优化软件,上线了做的网站怎么办,dz网站后台,wordpress数据库插件1.主要思想 前期已学习如何用ESP8266连接WIFI#xff0c;并发送数据到服务器。现在只需要在单片机与nodeMCU之间建立起串口通信#xff0c;这样单片机就可以将传感器测到的数据#xff1a;光照#xff0c;温度#xff0c;湿度等等传递给8266了#xff0c;然后8266再对数据…1.主要思想 前期已学习如何用ESP8266连接WIFI并发送数据到服务器。现在只需要在单片机与nodeMCU之间建立起串口通信这样单片机就可以将传感器测到的数据光照温度湿度等等传递给8266了然后8266再对数据进行打包发送到服务器。 51单片机和nodeMCU的连线方式如下 它们串口的两根线交叉连接二者的USB供电端一起接在电脑的USB口上。如果它们不是用的同一套供电系统就需要注意共地的问题 2.代码设计
51单片机的主体代码大致如下; 主要就是测量一些数据然后通过串口发送到nodeMCU nodeMCU的代码如下
#include ESP8266WiFi.h
#include PubSubClient.h
#include ArduinoJson.h
const char* ssid iPhone; //WIFI名称 自己补上你的WIFI
const char* password 12345678; //WIFI密码 自己补上你的密码
const char* mqtt_server broker-cn.emqx.io; //mqtt服务器地址 IP/域名 不改
const char *pubTopicmy_pubtopic;
const char *subTopicmy_subtopic;WiFiClient espClient;
PubSubClient client(espClient);char information[80];
int value 0;void setup_wifi() {delay(10);// We start by connecting to a WiFi networkSerial.println();Serial.print(Connecting to );Serial.println(ssid);WiFi.mode(WIFI_STA);WiFi.begin(ssid, password);while (WiFi.status() ! WL_CONNECTED) {delay(500);Serial.print(.);}randomSeed(micros());Serial.println();Serial.println(WiFi connected);Serial.println(IP address: );Serial.println(WiFi.localIP());
}void callback(char* topic, byte* payload, unsigned int length) {String cmd;for (int i 0; i length; i) {cmd(char)payload[i];}const size_t capacity JSON_OBJECT_SIZE(1) 10; //计算buffer的大小 ...SIZE1表明buffer中只有一个对象DynamicJsonBuffer jsonBuffer(capacity); //创建动态的jsonbufferJsonObject root jsonBuffer.parseObject(cmd); //解析Json对象字符串Serial.println(get);if(root.containsKey(led)) //判断是否包含某个键{int led root[led]; if(led1){Serial.println(1);}elseSerial.println(2);}if(root.containsKey(beep)) //判断是否包含某个键{int beep root[beep]; if(beep1){Serial.println(3);}elseSerial.println(4);}
}void reconnect() {// Loop until were reconnectedwhile (!client.connected()) {Serial.print(Attempting MQTT connection...);// Create a random client IDString clientId ESP8266Client-;clientId String(random(0xffff), HEX);// Attempt to connectif (client.connect(clientId.c_str())) {Serial.println(connected);// Once connected, publish an announcement...client.publish(pubTopic, hello world);// ... and resubscribeclient.subscribe(subTopic);} else {Serial.print(failed, rc);Serial.print(client.state());Serial.println( try again in 5 seconds);// Wait 5 seconds before retryingdelay(5000);}}
}void setup() {Serial.begin(9600);setup_wifi();client.setServer(mqtt_server, 1883);client.setCallback(callback);
}void loop() {if (!client.connected()) {reconnect();}client.loop();value0;while(!Serial.available()); //等待数据传送过来若没有数据一直等待即执行到本行不向下执行while(Serial.available()){ information[value](char)Serial.read(); value; delay(3);}client.publish(pubTopic, information); Serial.print(information);// }
} 3.注意实现
51单片机发送给nodeMCU的数据全部存在了这个数组里面 所以这个数组要足够大至少要大于你发送的内容。不然就会导致nodeMCU出现堆栈溢出的错误。本人在这里卡了好几个小时 希望大家可以避免类似的错误 在nodeMCU将数据发送到服务器的同时可以使用nodeMCU的串口将数据打印出来方便调试看看是否正确的接收到了数据。如下图所示这种是正确接收的效果。 如果通信出现错误没有准确接收那么它会显示一群乱码根本看不清楚是什么 如果你发现你接收到的数据总是不准确或者总是有乱码可以尝试调整这个延时时间 4.最终效果 如上图所示服务器已经可以成功接收到单片机发送的数据了
此时只需要开发一个MQTT协议的手机APP就可以实现单片机数据在手机上显示的效果!