使用 ESP8266 连接并连接贝壳物联平台 (需要对ESP8266进行透传联网),并温湿度数据上传。
贝壳物联的使用手册。
ESP8266 | Arduino |
---|---|
3v3 | 3.3V |
GND | GND |
EN | 3.3V |
RX | TX |
TX | RX |
DHT11 | Arduino |
---|---|
VCC | 5V |
GND | GND |
DATA | 2 |
注意:记得修改代码中的“DEVICEID”、“APIKEY”、“INPUTID1”、“INPUTID2”。
#include <aJSON.h> //引用库文件
#include <dht11.h> //引用dht11库文件
#define dht11Pin 2 //定义温湿度针脚号为2号引脚
//============= 此处必须修改============
String DEVICEID = "设备ID"; // 你的设备ID=======
String APIKEY = "设备APIKEY"; // 设备密码==
String INPUTID1 = "数据接口1"; //接口ID1==============
String INPUTID2 = "数据接口2"; //接口ID2==============
//=======================================
dht11 dht; //实例化一个对象
unsigned long lastCheckStatusTime = 0; //记录上次报到时间
unsigned long lastUpdateTime = 0;//记录上次上传数据时间
const unsigned long postingInterval = 40000; // 每隔40秒向服务器报到一次
const unsigned long updateInterval = 5000; // 数据上传间隔时间5秒
unsigned long checkoutTime = 0;//登出时间
void setup() {
pinMode(dht11Pin, OUTPUT); //通过定义将Arduino开发板上dht11Pin引脚(2号口)的工作模式转化为输出模式
Serial.begin(115200);
delay(5000);//等一会儿ESP8266
}
void loop() {
//每一定时间查询一次设备在线状态,同时替代心跳
if (millis() - lastCheckStatusTime > postingInterval) {
checkStatus();
}
//checkout 50ms 后 checkin
if ( checkoutTime != 0 && millis() - checkoutTime > 50 ) {
checkIn();
checkoutTime = 0;
}
//每隔一定时间上传一次数据
if (millis() - lastUpdateTime > updateInterval) {
int tol = dht.read(dht11Pin); //将读取到的值赋给tol
float temp = (float)dht.temperature; //将温度值赋值给temp
float humi = (float)dht.humidity; //将湿度值赋给humi
delay(1000); //延时1秒
update2(DEVICEID, INPUTID1, temp, INPUTID2, humi);
lastUpdateTime = millis();
}
//读取串口信息
while (Serial.available()) {
String inputString = Serial.readStringUntil('\n');
//检测json数据是否完整
int jsonBeginAt = inputString.indexOf("{");
int jsonEndAt = inputString.lastIndexOf("}");
if (jsonBeginAt != -1 && jsonEndAt != -1) {
//净化json数据
inputString = inputString.substring(jsonBeginAt, jsonEndAt + 1);
int len = inputString.length() + 1;
char jsonString[len];
inputString.toCharArray(jsonString, len);
aJsonObject *msg = aJson.parse(jsonString);
processMessage(msg);
aJson.deleteItem(msg);
}
}
}
//设备登录
//{"M":"checkin","ID":"xx1","K":"xx2"}\n
void checkIn() {
Serial.print("{\"M\":\"checkin\",\"ID\":\"");
Serial.print(DEVICEID);
Serial.print("\",\"K\":\"");
Serial.print(APIKEY);
Serial.print("\"}\n");
}
//强制设备下线,用消除设备掉线延时
//{"M":"checkout","ID":"xx1","K":"xx2"}\n
void checkOut() {
Serial.print("{\"M\":\"checkout\",\"ID\":\"");
Serial.print(DEVICEID);
Serial.print("\",\"K\":\"");
Serial.print(APIKEY);
Serial.print("\"}\n");
}
//查询设备在线状态
//{"M":"status"}\n
void checkStatus() {
Serial.print("{\"M\":\"status\"}\n");
lastCheckStatusTime = millis();
}
//处理来自ESP8266透传的数据
void processMessage(aJsonObject *msg) {
aJsonObject* method = aJson.getObjectItem(msg, "M");
if (!method) {
return;
}
String M = method->valuestring;
if (M == "WELCOME TO BIGIOT") {
checkOut();
checkoutTime = millis();
return;
}
if (M == "connected") {
checkIn();
}
}
//上传一个接口数据
//{"M":"update","ID":"2","V":{"2":"120"}}\n
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("\"}}");
}
//同时上传两个接口数据调用此函数
//{"M":"update","ID":"112","V":{"6":"1","36":"116"}}\n
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("\"}}");
}
待我们上传完代码后,刷新贝壳物联首页面,即可看到设备在线状态。
点击数据接口右侧的数据查看按钮即可查看上传的数据情况。
温度接口数据情况。
湿度接口数据情况。
好了,大功告成!恭喜你!
需要的库文件,为了下载方便,我上传到了蓝奏云,如果失效了,请联系我。
aJson 密码:8uwy
dht11 密码:gsvs
大家好,我是狂聊君。 今天来聊一聊 Mysql 缓存池原理。 提纲附上,话不多说,直...
本文实例讲述了AJAX+Servlet实现的数据处理显示功能。分享给大家供大家参考,具...
本文转载自微信公众号「SQL数据库」,作者丶平凡世界 。转载本文请联系开发公众...
idea官方推送了2020.2.4版本的更新,那么大家最关心的问题来了,之前激活idea202...
在Flash Player 10.1及以上版本中,adobe新增了全局错误处理程序UncaughtErrorEv...
前言 项目开发中不管是前台还是后台都会遇到烦人的null,数据库表中字段允许空值...
CKeditor,以前叫FCKeditor,已经使用过好多年了,功能自然没的说。最近升级到3....
本文转载自微信公众号「SH的全栈笔记」,作者SH。转载本文请联系SH的全栈笔记公...
来源:DeepenStudy 漏洞文件:js.asp % Dimoblog setoblog=newclass_sys oblog.a...
问题:我们在做flex的开发中,如果用到别人搭建好的框架,而别人的server名称往...