ESP8266 上报数据到贝壳物联
下面贴上代码:
#include <aJSON.h> #include <SPI.h> #include <Wire.h> #include <dht11.h> #include <DS3231.h> //============= 此处必须修改============ String DEVICEID="1494"; // 你的设备编号 == String APIKEY="d6easd772"; // 设备密码== String INPUTID1="1583";//接口ID============== String INPUTID2="1588";//接口ID============== String INPUTID3="1589";//接口ID============== String INPUTID4="1590";//接口ID============== //======================================= unsigned long lastCheckInTime = 0; //记录上次报到时间 unsigned long lastUpdateTime = 0;//记录上次上传数据时间 const unsigned long postingInterval = 40000; // 每隔40秒向服务器报到一次 const unsigned long updateInterval = 10000; // 数据上传间隔时间10秒 String inputString = "";//串口读取到的内容 boolean stringComplete = false;//串口是否读取完毕 boolean CONNECT = true; //连接状态 boolean isCheckIn = false; //是否已经登录服务器 char* parseJson(char *jsonString);//定义aJson字符串 ///**************************************************** dht11 DHT11; #define DHT11PIN 2 /////////////PM2.5 int measurePin = 1; //Connect dust sensor to Arduino A1 pin int ledPower = 3; //Connect 3 led driver pins of dust sensor to Arduino D3 float voMeasured = 0; float calcVoltage = 0; float dustDensity = 0; int samplingTime = 280; int deltaTime = 40; int sleepTime = 9680; ///////////////////PM2.5 /////****************************************************** int val;//MQ_2 float valTemperature;//定义变量 float valHumidity;//定义变量 void update1(String did, String inputid, float value); void setup() { Serial.begin(115200);//ESP 8266 工作波特率 Wire.begin(); int chk = DHT11.read(DHT11PIN); pinMode(ledPower,OUTPUT); delay(5000); } void loop() { if(millis() - lastCheckInTime > postingInterval || lastCheckInTime==0) { checkIn(); } val=analogRead(0); valTemperature = (float)DHT11.temperature; valHumidity = (float)DHT11.humidity; digitalWrite(ledPower,LOW); delayMicroseconds(samplingTime); voMeasured = analogRead(measurePin); // read the dust value delayMicroseconds(deltaTime); digitalWrite(ledPower,HIGH); // turn the LED off delayMicroseconds(sleepTime); calcVoltage = voMeasured * (5.0 / 1024.0); dustDensity = 0.17 * calcVoltage - 0.1; if((millis() - lastUpdateTime >= updateInterval) && isCheckIn) { update1(DEVICEID,INPUTID1,val);//MQ_2 update1(DEVICEID,INPUTID2,valTemperature); update1(DEVICEID,INPUTID3,valHumidity); update1(DEVICEID,INPUTID4,dustDensity); ///************************ } serialEvent(); if (stringComplete) { inputString.trim(); //Serial.println(inputString); if(inputString=="CLOSED"){ Serial.println("connect closed!"); CONNECT=false; }else{ int len = inputString.length()+1; if(inputString.startsWith("{") && inputString.endsWith("}")){ char jsonString[len]; inputString.toCharArray(jsonString,len); aJsonObject *msg = aJson.parse(jsonString); processMessage(msg); aJson.deleteItem(msg); } } // clear the string: inputString = ""; stringComplete = false; } } void checkIn() {//定时签到,防止离线 if (!CONNECT) { isCheckIn = false; Serial.print("+++"); delay(500); Serial.print("\r\n"); delay(1000); Serial.print("AT+RST\r\n"); delay(6000); CONNECT=true; lastCheckInTime=0; } else{ Serial.print("{\"M\":\"checkin\",\"ID\":\""); Serial.print(DEVICEID); Serial.print("\",\"K\":\""); Serial.print(APIKEY); Serial.print("\"}\r\n"); lastCheckInTime = millis(); isCheckIn = true; } } void processMessage(aJsonObject *msg){ aJsonObject* method = aJson.getObjectItem(msg, "M"); aJsonObject* content = aJson.getObjectItem(msg, "C"); aJsonObject* client_id = aJson.getObjectItem(msg, "ID"); //char* st = aJson.print(msg); if (!method) { return; } //Serial.println(st); //free(st); String M=method->valuestring; String C=content->valuestring; String F_C_ID=client_id->valuestring; if(M=="say"){ if(C=="play"){ // digitalWrite(LED, HIGH); sayToClient(F_C_ID,"LED on!"); } if(C=="stop"){ // digitalWrite(LED, LOW); sayToClient(F_C_ID,"LED off!"); } if(C=="wendu"){ sayToClient(F_C_ID,String(valTemperature)); } if(C=="shidu"){ sayToClient(F_C_ID,String(valHumidity)); } if(C=="mq2"){ sayToClient(F_C_ID,String(val)); } if(C=="pm"){ sayToClient(F_C_ID,String(dustDensity)); } } } void sayToClient(String client_id, String content){//命令回复 Serial.print("{\"M\":\"say\",\"ID\":\""); Serial.print(client_id); Serial.print("\",\"C\":\""); Serial.print(content); Serial.print("\"}\r\n"); lastCheckInTime = millis(); } void serialEvent() { while (Serial.available()) { char inChar = (char)Serial.read(); inputString += inChar; if (inChar == '\n') { stringComplete = true; } } } //上报数据 拼接json void update1(String did, String inputid, float value){ Serial.print("{\"M\":\"update\",\"ID\":\""); Serial.print(did); Serial.print("\",\"V\":{\""); Serial.print(inputid); Serial.print("\":\""); Serial.print(value); Serial.println("\"}}"); lastCheckInTime = millis(); lastUpdateTime= millis(); } //同时上传两个接口数据调用此函数 void update2(String did, String inputid1, float value1, String inputid2, float value2){ Serial.print("{\"M\":\"update\",\"ID\":\""); Serial.print(did); Serial.print("\",\"V\":{\""); Serial.print(inputid1); Serial.print("\":\""); Serial.print(value1); Serial.print("\",\""); Serial.print(inputid2); Serial.print("\":\""); Serial.print(value2); Serial.println("\"}}"); lastCheckInTime = millis(); lastUpdateTime= millis(); }
作者:Dozeoo
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~