直接上代码写的不喜勿喷

#include <ESP8266WiFi.h>
#include <EEPROM.h>
#include "DHT.h"
#include <DNSServer.h>
#include <ESP8266WebServer.h>
//#include <NTPClient.h>
//#define UID  "a27bfdae702118e7ac303bc1de2e1434"
//#define TOPIC  "esp"
#define TCP_SERVER_ADDR "bemfa.com" //巴法云服务器地址默认即可
#define TCP_SERVER_PORT "8344" //服务器端口,tcp创客云端口8344
//**************************************************//#define DHTPIN D4
#define LED_Pin D5
String my_led_status = "off";
String TcpClient_Buff = "";//初始化字符串,用于接收服务器发来的数据
unsigned int TcpClient_BuffIndex = 0;
unsigned long TcpClient_preTick = 0;
unsigned long preHeartTick = 0;//心跳
unsigned long preHeartTick1 = 0;
unsigned long preTCPStartTick = 0;//连接
char get_ssid[40] = {0}; //从EEPROM中读取得到的SSIDchar类型数组
char get_psk[50] = {0}; //从EEPROM中读取得到的WIFI密码
char UID[45] = {0};
char TOPIC[34] = {0};
char wendu[10] = {0};
String kk = "";
String getTopic = "";
String getMsg = "";
String rr;
String tt;
String SSID_S;
String psk_s;
//String Mqtt_Bu;
#define addr 200   //这个地址可以随意设置,如果用本程序则不能设置为小于50以下的值(为读取密码字符串预留空间)
#define addr1 400
#define addr2 600
#define addr3 740
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define MAX_PACKETSIZE 512
//设置心跳值30s
#define KEEPALIVEATIME 30*1000
#define KEEPALIVEATIME1 1*1000
//#define KEEPALIVEATIME2 2*100
//tcp客户端相关初始化,默认即可
WiFiClient TCPclient;
bool preTCPConnected = false;
//void doWiFiTick();
//void startSTA();
void doTCPClientTick();
void startTCPClient();
void sendtoTCPServer(String p);
//led控制函数,具体函数内容见下方
void turnOnLed();
void turnOffLed();
void sendtoTCPServer(String p) {if (!TCPclient.connected()){Serial.println("Client is not readly");return;}TCPclient.print(p);
}int m ; //读取字符串长度的缓冲变量
union data  //定义一个联合体数据类型
{char a;byte b[2];
};data col[40];  //两个缓存联合体用来分别用来读取 WIFI密码和名称
data col_2[50];
data col_3[50];
data col_4[50];
data col_5[50];
//两个用来分别转换字符串的数组
void change(String name1) {for (int i = 0; i < name1.length(); i++) {col[i].a = name1[i];}
}void change_2(String name1) {for (int i = 0; i < name1.length(); i++) {col_2[i].a = name1[i];}
}
void change_3(String name1) {for (int i = 0; i < name1.length(); i++) {col_3[i].a = name1[i];}
}
void change_4(String name1) {for (int i = 0; i < name1.length(); i++) {col_4[i].a = name1[i];}
}
void change_5(String name1) {for (int i = 0; i < name1.length(); i++) {col_5[i].a = name1[i];}
}
//智能配网const char* AP_NAME = "配网WIFI";//wifi名字
//暂时存储wifi账号密码
//char get_ssid[32] = {0};
//char get_psk[64] = {0};
//配网页面代码
const char* page_html = "\
<!DOCTYPE html>\r\n\
<html lang='en'>\r\n\
<head>\r\n\<meta charset='UTF-8'>\r\n\<meta name='viewport' content='width=device-width, initial-scale=1.0'>\r\n\<title>Document</title>\r\n\
</head>\r\n\
<body>\r\n\<form name='input' action='/' method='POST'>\r\n\wifi名称: <br>\r\n\<input type='text' name='ssid'><br>\r\n\wifi密码:<br>\r\n\<input type='text' name='password'><br>\r\n\私钥UID:<br>\r\n\<input type='text' name='UID'><br>\r\n\主题:<br>\r\n\<input type='text' name='TOPIC'><br>\r\n\<input type='submit' value='保存'>\r\n\<a href='./m?x1=1'><input type='button'value='重启'>\r\n\</form>\r\n\
</body>\r\n\
</html>\r\n\
";const byte DNS_PORT = 53;//DNS端口号
IPAddress apIP(192, 168, 4, 1);//esp8266-AP-IP地址
DNSServer dnsServer;//创建dnsServer实例
ESP8266WebServer server(80);//创建WebServervoid handleRoot() {//访问主页回调函数server.send(200, "text/html", page_html);if (server.arg("x1") == "1") {ESP.restart();server.send(200, "text/html", "<meta charset='UTF-8'>重启成功");//返回保存成功页面}
}void handleRootPost() {//Post回调函数Serial.println("handleRootPost");if (server.hasArg("ssid")) {//判断是否有账号参数Serial.print("got ssid:");strcpy(get_ssid, server.arg("ssid").c_str());//将账号参数拷贝到get_ssid中Serial.println(get_ssid);} else {//没有参数Serial.println("error, not found ssid");server.send(200, "text/html", "<meta charset='UTF-8'>error, not found ssid");//返回错误页面return;}//密码与账号同理if (server.hasArg("password")) {Serial.print("got password:");strcpy(get_psk, server.arg("password").c_str());Serial.println(get_psk);} else {Serial.println("error, not found password");server.send(200, "text/html", "<meta charset='UTF-8'>error, not found password");return;}if (server.hasArg("UID")) {//判断是否有账号参数Serial.print("UID:");strcpy(UID, server.arg("UID").c_str());//将账号参数拷贝到get_ssid中//    String rr(UID);Serial.println(UID);//    Serial.println(rr);} else {//没有参数Serial.println("没有私钥UID");server.send(200, "text/html", "<meta charset='UTF-8'>error, 没有私钥UID");//返回错误页面return;}if (server.hasArg("TOPIC")) {//判断是否有账号参数Serial.print("got TOPIC:");strcpy(TOPIC, server.arg("TOPIC").c_str());//将账号参数拷贝到get_ssid中//    String tt(TOPIC);Serial.println(TOPIC);//    Serial.println(tt);} else {//没有参数Serial.println("没有主题");server.send(200, "text/html", "<meta charset='UTF-8'>error, 没有主题");//返回错误页面return;}server.send(200, "text/html", "<meta charset='UTF-8'>保存成功");//返回保存成功页面delay(2000);//连接wificonnectNewWifi();
}void initBasic(void) { //初始化基础//  Serial.begin(115200);WiFi.hostname("Smart-ESP8266");//设置ESP8266设备名
}void initSoftAP(void) { //初始化AP模式WiFi.mode(WIFI_AP);WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));if (WiFi.softAP(AP_NAME)) {Serial.println("ESP8266 SoftAP is right");}
}void initWebServer(void) { //初始化WebServer//server.on("/",handleRoot);//上面那行必须以下面这种格式去写否则无法强制门户server.on("/", HTTP_GET, handleRoot);//设置主页回调函数server.onNotFound(handleRoot);//设置无法响应的http请求的回调函数server.on("/", HTTP_POST, handleRootPost);//设置Post请求回调函数server.begin();//启动WebServerSerial.println("WebServer started!");
}void connectNewWifi(void) {//  Serial.println(get_ssid);//    Serial.print(get_psk);WiFi.mode(WIFI_STA);//切换为STA模式WiFi.setAutoConnect(true);//设置自动连接WiFi.begin(get_ssid, get_psk);Serial.print("");Serial.print("Connect to wifi");int count = 0;while (WiFi.status() != WL_CONNECTED) {delay(500);count++;if (count > 50) { //如果5秒内没有连上,就开启Web配网 可适当调整这个时间initSoftAP();initWebServer();initDNS();break;//跳出 防止无限初始化}Serial.print(".");}Serial.println("");if (WiFi.status() == WL_CONNECTED) { //如果连接上 就输出IP信息 防止未连接上break后会误输出Serial.println("WIFI Connected!");Serial.println("IP address: ");Serial.println(WiFi.localIP());//打印esp8266的IP地址for (int i = 0; i < 1024; i++)EEPROM.write(i, 0);EEPROM.commit();//    Serial.println(get_ssid);//    Serial.print(get_psk);String rr(UID);String tt(TOPIC);change(get_ssid);  //将WIFI的名称和密码转换到缓存数组当中去change_2(get_psk);change_3(UID);change_4(TOPIC);Serial.println("已缓存");for (int h = 0 ; h < WiFi.SSID().length(); h++) //将名称一个字节一个字节缓存进EEPROM里面{for (int k = 0 ; k < 2; k++) {EEPROM.write(m + addr, col[h].b[k]);m++; //m为字符串的个数}}EEPROM.write(addr + 1, m); //将WIFI名称的长度写入到存储到EPRROM里面,将用来前面的判断是否之前存储过WIFIm = 0; //将缓存清0for (int h = 0 ; h < WiFi.psk().length(); h++) //同理 密码{for (int k = 0 ; k < 2; k++) {EEPROM.write(4 + m, col_2[h].b[k]);m++;}}//    Serial.println("写入m得值为:" + m);EEPROM.write(0, m); //同理写入密码的长度m = 0;for (int h = 0 ; h < rr.length(); h++) //将名称一个字节一个字节缓存进EEPROM里面{for (int k = 0 ; k < 2; k++) {EEPROM.write(m + addr1, col_3[h].b[k]);m++; //m为字符串的个数//       Serial.println("写入m得值为:" + m);}}EEPROM.write(addr1 + 1, m);m = 0;for (int h = 0 ; h < tt.length(); h++) //将名称一个字节一个字节缓存进EEPROM里面{for (int k = 0 ; k < 2; k++) {EEPROM.write(m + addr2, col_4[h].b[k]);m++; //m为字符串的个数//       Serial.println("写入m得值为:" + m);}}EEPROM.write(addr2 + 1, m);EEPROM.commit();  //不要忘记储存!!!!startTCPClient();server.stop();}
}
void initDNS(void) { //初始化DNS服务器if (dnsServer.start(DNS_PORT, "*", apIP)) { //判断将所有地址映射到esp8266的ip上是否成功Serial.println("start dnsserver success.");}else Serial.println("start dnsserver failed.");}//初始化相关硬件
void setup() {pinMode(LED_Pin, OUTPUT);digitalWrite(LED_Pin, HIGH);Serial.begin(115200);initBasic();EEPROM.begin(1024);  //申请512个缓存字节dht.begin();//  timeClient.begin();Serial.println("Beginning...");//首先判断是否之前已经缓存了一个WIFI密码和名称,如果没有则进行网页配网,并将WIFI信息进行储存if (EEPROM.read(addr + 1) == 0 || EEPROM.read(0) == 0) {//smart_config();//网页配网initSoftAP();initWebServer();initDNS();}else   //如果之前已经储存过密码则对其进行读取{int n = 0;for (int i = 0 ; i < (int)EEPROM.read(addr + 1); i++) {if (i % 2 == 0) {col[30 + n].b[0] = EEPROM.read(addr + i);delay(200);}else{col[30 + n].b[1] = EEPROM.read(addr + i);//      Serial.print((char)col[30+n].a);get_ssid[n] = (char)col[30 + n].a ;n++;delay(200);}}n = 0;for (int i = 0 ; i < (int)EEPROM.read(0); i++) {if (i % 2 == 0) {col_2[30 + n].b[0] = EEPROM.read(4 + i);delay(200); //读取的时候记得延时合理的时间}else{col_2[30 + n].b[1] = EEPROM.read(4 + i);//      Serial.print((char)col_2[30+n].a);get_psk[n] = (char)col_2[30 + n].a ;n++;delay(200);}}n = 0;for (int i = 0 ; i < (int)EEPROM.read(addr1 + 1); i++) {if (i % 2 == 0) {col_3[30 + n].b[0] = EEPROM.read(addr1 + i);delay(200);}else{col_3[30 + n].b[1] = EEPROM.read(addr1 + i);//        Serial.print((char)col_3[30 + n].a);UID[n] = (char)col_3[30 + n].a ;n++;delay(200);}}n = 0;for (int i = 0 ; i < (int)EEPROM.read(addr2 + 1); i++) {if (i % 2 == 0) {col_4[30 + n].b[0] = EEPROM.read(addr2 + i);delay(200);}else{col_3[30 + n].b[1] = EEPROM.read(addr2 + i);//        Serial.print((char)col_4[30 + n].a);TOPIC[n] = (char)col_4[30 + n].a ;n++;delay(200);}}n = 0;for (int i = 0 ; i < (int)EEPROM.read(addr3 + 1); i++) {if (i % 2 == 0) {col_5[30 + n].b[0] = EEPROM.read(addr3 + i);delay(200);}else{col_5[30 + n].b[1] = EEPROM.read(addr3 + i);//        Serial.print((char)col_5[30 + n].a);wendu[n] = (char)col_5[30 + n].a ;n++;delay(200);}}String SSID_S(get_ssid);String psk_s(get_psk);rr = UID;tt = TOPIC;kk = wendu;Serial.println("字符串ssid: " + SSID_S);Serial.println("字符串secret: " + psk_s);Serial.println("字符串UID: " + rr);Serial.println("字符串TOPIC: " + tt);WiFi.setAutoConnect(true);WiFi.begin(SSID_S, psk_s);//WiFi.begin(ssid);*/int count = 0;while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");count++;if (count > 100) { //如果5秒内没有连上,就开启Web配网 可适当调整这个时间initSoftAP();initWebServer();initDNS();break;}}if (WiFi.status() == WL_CONNECTED) {Serial.println("WiFi connected");Serial.println("IP address:");Serial.println(WiFi.localIP());startTCPClient();}}
}
void startSTA() {WiFi.setAutoConnect(true);WiFi.begin(SSID_S, psk_s);delay(5000);
}void startTCPClient() {String rr(UID);String tt(TOPIC);if (WiFi.status() == WL_CONNECTED) {if (TCPclient.connect(TCP_SERVER_ADDR, atoi(TCP_SERVER_PORT))) {Serial.print("\nConnected to server:");Serial.printf("%s:%d\r\n", TCP_SERVER_ADDR, atoi(TCP_SERVER_PORT));String tcpTemp = ""; //初始化字符串tcpTemp = "cmd=1&uid=" + rr + "&topic=" + tt + "\r\n"; //构建订阅指令sendtoTCPServer(tcpTemp); //发送订阅指令tcpTemp = ""; //清空preTCPConnected = true;preHeartTick = millis();TCPclient.setNoDelay(true);}else {Serial.print("Failed connected to server:");Serial.println(TCP_SERVER_ADDR);TCPclient.stop();preTCPConnected = false;startSTA();}preTCPStartTick = millis();}
}
void doTCPClientTick() {//检查是否断开,断开后重连getTopic = "";getMsg = "";//   if(WiFi.status() != WL_CONNECTED) return;if (!TCPclient.connected()) {//断开重连if (preTCPConnected == true) {preTCPConnected = false;preTCPStartTick = millis();Serial.println();Serial.println("TCP Client disconnected.");TCPclient.stop();} else if (millis() - preTCPStartTick > 1 * 1000) //重新连接startTCPClient();}else{if (TCPclient.available()) {//收数据char c = TCPclient.read();TcpClient_Buff += c;TcpClient_BuffIndex++;TcpClient_preTick = millis();if (TcpClient_BuffIndex >= MAX_PACKETSIZE - 1) {TcpClient_BuffIndex = MAX_PACKETSIZE - 2;TcpClient_preTick = TcpClient_preTick - 10;}preHeartTick = millis();}if (millis() - preHeartTick >= KEEPALIVEATIME) { //保持心跳preHeartTick = millis();Serial.println("--Keep alive:");sendtoTCPServer("ping\r\n"); //发送心跳,指令需\r\n结尾,详见接入文档介绍Serial.print("4");}}if ((TcpClient_Buff.length() >= 1) && (millis() - TcpClient_preTick >= 10)){if (TcpClient_Buff.indexOf("#") != -1) {TcpClient_Buff = "";TcpClient_BuffIndex = 0;getMsg = "";} else {TCPclient.flush();Serial.print("Rev string: ");TcpClient_Buff.trim(); //去掉首位空格Serial.println(TcpClient_Buff); //打印接收到的消息if (TcpClient_Buff.length() > 15) { //注意TcpClient_Buff只是个字符串,在上面开头做了初始化 String TcpClient_Buff = "";//      Serial.print("11");//此时会收到推送的指令,指令大概为 cmd=2&uid=xxx&topic=light002&msg=offint topicIndex = TcpClient_Buff.indexOf("&topic=") + 7; //c语言字符串查找,查找&topic=位置,并移动7位,不懂的可百度c语言字符串查找int msgIndex = TcpClient_Buff.indexOf("&msg=");//c语言字符串查找,查找&msg=位置getTopic = TcpClient_Buff.substring(topicIndex, msgIndex); //c语言字符串截取,截取到topic,不懂的可百度c语言字符串截取getMsg = TcpClient_Buff.substring(msgIndex + 5); //c语言字符串截取,截取到消息Serial.print("topic:------");Serial.println(getTopic); //打印截取到的主题值Serial.print("msg:--------");Serial.println(getMsg);   //打印截取到的消息值}}if (getMsg  == "on") {     //如果是消息==打开//      turnOnLed();my_led_status = "on";//      delay(100);} else if (getMsg == "off") { //如果是消息==关闭//      turnOffLed();my_led_status = "off";//      delay(100);}if (getMsg.indexOf("°C") != -1) {kk = getMsg;if (getMsg.indexOf("=") != -1) {} else {yy();getMsg = "";}}TcpClient_Buff = "";TcpClient_BuffIndex = 0;getMsg = "";}
}
void yy() {String uu = kk;Serial.println("10");Serial.println(kk);change_5(kk);m = 0;for (int h = 0 ; h < uu.length(); h++) //将名称一个字节一个字节缓存进EEPROM里面{for (int k = 0 ; k < 2; k++) {EEPROM.write(m + addr3, col_5[h].b[k]);m++; //m为字符串的个数//       Serial.println("写入m得值为:" + m);}}EEPROM.write(addr3 + 1, m);EEPROM.commit();  //不要忘记储存!!!!}//打开灯泡
void turnOnLed() {//  Serial.println("Turn ON");digitalWrite(LED_Pin, LOW);delay(10);
}//关闭灯泡
void turnOffLed() {//  Serial.println("Turn OFF");digitalWrite(LED_Pin, HIGH);delay(10);
}void fo() {int my_int = kk.toInt();my_int - 1;float h;float t;if (millis() - preHeartTick1 >= KEEPALIVEATIME1) { //上传数据//    oo = "";preHeartTick = millis();float h = dht.readHumidity();// Read temperature as Celsius (the default)float t = dht.readTemperature();// Read temperature as Fahrenheit (isFahrenheit = true)float f = dht.readTemperature(true);// Check if any reads failed and exit early (to try again).if (isnan(h) || isnan(t) || isnan(f)) {Serial.println(F("Failed to read from DHT sensor!"));return;}// Compute heat index in Fahrenheit (the default)float hif = dht.computeHeatIndex(f, h);// Compute heat index in Celsius (isFahreheit = false)float hic = dht.computeHeatIndex(t, h, false);String oo(t);int my = oo.toInt();if (my_led_status == "on") {if (my < my_int - 3) {turnOnLed();} else if (my >= my_int) {turnOffLed();}} else if (my_led_status == "off") {turnOffLed();} else if (my < 8) {turnOnLed();} else if (my >= 10) {turnOffLed();}//  Serial.print(F("Humidity: "));//  Serial.print(h);//  Serial.print(F("%  Temperature: "));//  Serial.print(t);//  Serial.print(F("°C "));//  Serial.print(f);//  Serial.print(F("°F  Heat index: "));//  Serial.print(hic);//  Serial.print(F("°C "));//  Serial.print(hif);//  Serial.println(F("°F"));if (WiFi.status() == WL_CONNECTED) {// Reading temperature or humidity takes about 250 milliseconds!// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)String upstr = "";upstr = "cmd=2&uid=" + (String)UID + "&topic=" + (String)TOPIC + "&msg=" + (String)t + "#" + (String)h + "#" + (String)my_led_status + "#" + (String)my_int + "\r\n";sendtoTCPServer(upstr);upstr = "";//      timeClient.update();//      Serial.println(timeClient.getFormattedTime());}}
}void loop() {//  Serial.println("IP address: ");doTCPClientTick();fo();// put your main code here, to run repeatedly:server.handleClient();dnsServer.processNextRequest();
}

微信小程序就不上传了上传控制代码

Page({// index.js
// 获取应用实例data: {uid:"",//用户密钥,巴法云控制台获取          自己填写ledtopic:"",//控制led的主题,创客云控制台创建dhttopic:"",//传输温湿度的主题,创客云控制台创建 这里可以使用同一个主题device_status:"离线",// 显示led是否在线的字符串,默认离线ledOnOff:"关闭",     //显示led开关状态checked: false,     //led的状态记录。默认led关闭wendu:null,//温度值,默认为空shidu:null,//湿度值,默认为空dataTime:null, //记录数据上传的时间ledicon:"/utils/img/lightoff.png",//显示led图标的状态。默认是关闭状态图标client: null,//mqtt客户端,默认为空infoMess: '',userN:'',},
//屏幕打开时执行的函数
onLoad() {//检查设备是否在线this.getOnline()//检查设备是打开还是关闭this.getOnOff()//获取服务器上现在存储的dht11数据this.getdht11()//设置定时器,每3秒请求一下设备状态setInterval(this.getdht11, 3000)setInterval(this.getOnline, 10000)
},userNameInput:function(e){this.setData({userN:e.detail.value})},loginBtnClick:function(){if(this.data.userN.length == 0 ){this.setData({infoMess:'温馨提示:设定温度不能为空!',})}else{this.setData({infoMess:'设定温度:'+this.data.userN+'℃',})this.LedSendMsg(this.data.userN+"°C")delay(1000);}},//控制灯的函数1,小滑块点击后执行的函数onChange({ detail }){//detail是滑块的值,检查是打开还是关闭,并更换正确图标this.setData({ checked: detail,});if(detail == true){//如果是打开操作this.LedSendMsg("on") //发送打开指令this.setData({ ledicon: "/utils/img/lighton.png",//设置led图片为on});}else{this.LedSendMsg("off") //发送关闭指令this.setData({ ledicon: "/utils/img/lightoff.png",//设置led图片为off});delay(100);}},//点击led图片执行的函数onChange2(){var that = this//如果点击前是打开状态,现在更换为关闭状态,并更换图标,完成状态切换if( that.data.checked == true){that.LedSendMsg("off")//发送关闭指令this.setData({ ledicon: "/utils/img/lightoff.png",//设置led图片为offchecked:false //设置led状态为false});}else{//如果点击前是关闭状态,现在更换为打开状态,并更换图标,完成状态切换that.LedSendMsg("on")//发送打开指令that.setData({ ledicon: "/utils/img/lighton.png",//设置led图片为onchecked:true//设置led状态为true});delay(100);}
},
getOnline(){var that = this//api 接口详细说明见巴法云接入文档wx.request({url: 'https://api.bemfa.com/api/device/v1/status/?', //状态api接口,详见巴法云接入文档data: {uid: that.data.uid,topic: that.data.ledtopic,},header: {'content-type': "application/x-www-form-urlencoded"},success (res) {console.log(res.data)if(res.data.status === "online"){//如果在线that.setData({device_status:"在线"  //设置状态为在线})}else{                          //如果不在线that.setData({device_status:"离线"   //设置状态为离线})}console.log(that.data.device_status)}})    },getOnOff(){//api 接口详细说明见巴法云接入文档var that = thiswx.request({url: 'https://api.bemfa.com/api/device/v1/data/1/get/', //状态api接口,详见巴法云接入文档data: {uid: that.data.uid,topic: that.data.ledtopic,num:1},header: {'content-type': "application/x-www-form-urlencoded"},success (res) {console.log(res.data.msg)if(res.data.msg == "on"){  //如果开关onthat.setData({checked:true,ledOnOff:"打开",ledicon: "/utils/img/lighton.png",})}else{           //如果开关offthat.setData({checked:false,ledOnOff:"关闭",ledicon: "/utils/img/lightoff.png",})}}})    },getdht11(){//获取温湿度值,屏幕初始化时,未订阅收到温湿度时,先去主动获取值//api 接口详细说明见巴法云接入文档var that = thiswx.request({url: 'https://api.bemfa.com/api/device/v1/data/1/get/', //状态api接口,详见巴法云接入文档data: {uid: that.data.uid,topic: that.data.dhttopic,num:1},header: {'content-type': "application/x-www-form-urlencoded"},success (res) {console.log(res)if(res.data.msg.indexOf("#") != -1){//如果数据里包含#号,表示获取的是传感器值,因为单片机上传数据的时候用#号进行了包裹//如果有#号就进行字符串分割var all_data_arr = res.data.msg.split("#"); //分割数据,并把分割后的数据放到数组里。console.log(all_data_arr)//打印数组that.setData({ //数据赋值给变量wendu:all_data_arr[1],//赋值温度shidu:all_data_arr[2], //赋值湿度wendu1:all_data_arr[4],dataTime:res.data.time})if(all_data_arr[3] != undefined){//判断是否上传了led状态if(all_data_arr[3] == "on"){//如果单片机处于打开状态that.setData({ //数据赋值给变量ledOnOff:"打开",//赋值led状态ledicon: "/utils/img/lighton.png",checked:true,})}else{that.setData({ //数据赋值给变量ledOnOff:"关闭",//赋值led状态ledicon: "/utils/img/lightoff.png",checked:false,})}}}}})    },
//发送开关数据
LedSendMsg(msg){wx.request({url: 'https://api.bemfa.com/api/device/v1/data/1/push/get/?', //状态api接口,详见巴法云接入文档data: {uid: this.data.uid,topic: this.data.ledtopic,msg:msg},header: {'content-type': "application/x-www-form-urlencoded"},success (res) {}})
},
})

欢迎大家讨论

esp8266+arduino+网页配网+温湿度上传+温度控制开关+eeprom永久保存+微信小程序控制相关推荐

  1. Arduino+ESP8266自动配网并上传温湿度、光照强度到OneNET

    前言:     从接触ESP8266到现在有一段时间了,也感受到ESP8266的强大,其高性价比给极客者们带来了极大的福音.之前用ESP8266改装了一部遥控车,使其能用手机控制,手机app是用易安卓 ...

  2. 通过一键配网,上传阿里云数据

    #include <DHT.h> #include<ESP8266WiFi.h> #include <PubSubClient.h> #include <Wi ...

  3. ESP8266 arduino 一键配网之后掉电不丢失wifi数据

    本文关注掉电丢失wifi数据和不丢失数据的异同点. 一.软硬件 所用硬件如下图,软件是arduino 1.8.9. 二.代码分析 代码如下: void smartConfig() {WiFi.mode ...

  4. 微信小程序图片上传到服务器再自动替换,微信小程序批量上传图片到服务器,并实现预览,删除功能...

    js代码 Page({ /** 页面的初始数据 / data: { files: [], //门店图片信息,数组图片保存作为数据源 }, /* 多图片上传 */ chooseImage: functi ...

  5. 本地字体上传到网络后运用到微信小程序详细过程

    前言 首先是直接在本地直接使用很不方便,因为微信小程序最多上传2m代码,而有时候一个字体文件就有十几m或者更多... 使用微信小程序自带的 wx.loadFontFace() 改变项目字体有很多限制, ...

  6. element-ui上传excel表格,展示在微信小程序中

    文章目录 1.上传表格 2.小程序端拉取列表获取表格路径 3.测试能否打开 1.上传表格 上传成功后调用接口发给后端,后端保存在服务器中,然后返回一个文件路径 /* html <el-uploa ...

  7. 小程序上传视频的php接口处理,微信小程序[第十二篇] -- 上传视频

    通过上一篇的学习,我们可以成功将宝宝的照片传到指定相册了,但是可爱的宝宝岂能只有照片,小视频必须同步跟上,莫问题!咱这篇就来一个视频上传的实现. 俺家小核桃镇贴. 服务端 其实对于yii2程序而言,如 ...

  8. 微信小程序上传视频到服务器太慢,微信小程序视频播放加载很慢

    - 当前 Bug 的表现(可附上截图) - 预期表现 - 复现路径 - 提供一个最简复现 Demo 微信小程序视频播放加载很慢,一直转圈,3分钟后才能播放,而且播放很卡,加了带宽和cdn也没有效果,官 ...

  9. 网盘上传工具Boxifier怎么用?

    Dropbox是一项云存储服务,可帮你将所有照片.文档和视频携带到任何地方的免费服务.在电脑上安装 Dropbox 后,你保存到 Dropbox 文件夹的任何文件会自动保存到你所有的电脑.Androi ...

  10. 【工程师有空了】安信可ESP8266系列及ESP32系列模组AT指令实现网页配网---又多了一个配网方式

    文章目录 前言 AT指令介绍: 配网原理 一.实验准备 可能你还要用到: 二.编译固件 三.开启配网 四.常见问题 1.AT固件烧录不显示 "ready" 2.显示配网失败 3.除 ...

最新文章

  1. 使用Junit4时问题
  2. MyEclipse 常用操作
  3. iOS Hacker Xcode玩转arm64汇编基础
  4. ubuntu16.04安装cuda11.3、cudnn8.2.1、tensorrt8.0.3.4全过程
  5. 客户端与服务站《Socket》
  6. 图像语义分割(10)-DeepLabV3+: 用于图像语义分割的带有空洞可分离卷积的编解码结构
  7. Linux下如何实现对某个文件夹进行压缩
  8. intouch的报警怎么发到微信上
  9. 中文邮件分类[朴素贝叶斯、支持向量机、Logistic,TF-IDF,词袋模型]
  10. springboot--入门程序实现CRUD操作
  11. EfficientDet:目标识别领域的 EfficientNet
  12. Eclipse中各种编码格式及设置
  13. 超爽的对战游戏3.0版本来了 非常有趣
  14. 护眼的VS2019黑色主题!把 Visual Studio 2019 主题设置为 JetBrains Darcula 主题,类似 Pycharm, CLion, IntelliJ IDEA
  15. 《中国垒球协会》:新春贺词
  16. windows DNS缓存查看与清理
  17. Thunderboard EFR32BG22出厂历程分析
  18. 产品Backlog 管理
  19. CocoaPods制作第三方库,管理自己的私有库以及发布官方库(模块化与组件化)
  20. Java实现课程推荐算法

热门文章

  1. Linux中使用cp命令报cp:omitting directory错误
  2. 如何描述缺陷(Defect)?
  3. Win10+NVIDIA TITAN Xp | RTX 2060+Python3.6+TensorFlow_gpu2.1.0+keras2.3.1+cuda10.1+cudnn7.6.5.32记录
  4. Hive 面试题 | 连续登陆天数统计
  5. MATLAB中dither抖动函数的用法
  6. 假如现在你有30分钟,你会做什么?
  7. PLL Simulink行为模型
  8. 新浪短网址在线生成,官方api接口获取方案
  9. python俄罗斯方块小游戏实验报告_用Python实现童年小游戏俄罗斯方块
  10. THREE 使用Tween插件实现动画