ESP8266 上报数据到贝壳物联


下面贴上代码:
#include <aJSON.h>
#include <SPI.h>
#include <Wire.h>
#include <dht11.h>
#include <DS3231.h> //============= 此处必须修改============
String DEVICEID=""; // 你的设备编号 ==
String APIKEY="d6easd772"; // 设备密码==
String INPUTID1="";//接口ID==============
String INPUTID2="";//接口ID==============
String INPUTID3="";//接口ID==============
String INPUTID4="";//接口ID==============
//=======================================
unsigned long lastCheckInTime = ; //记录上次报到时间
unsigned long lastUpdateTime = ;//记录上次上传数据时间
const unsigned long postingInterval = ; // 每隔40秒向服务器报到一次
const unsigned long updateInterval = ; // 数据上传间隔时间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 = ; //Connect dust sensor to Arduino A1 pin
int ledPower = ; //Connect 3 led driver pins of dust sensor to Arduino D3
float voMeasured = ;
float calcVoltage = ;
float dustDensity = ;
int samplingTime = ;
int deltaTime = ;
int sleepTime = ;
///////////////////PM2.5
/////******************************************************
int val;//MQ_2
float valTemperature;//定义变量
float valHumidity;//定义变量
void update1(String did, String inputid, float value);
void setup() {
Serial.begin();//ESP 8266 工作波特率
Wire.begin();
int chk = DHT11.read(DHT11PIN);
pinMode(ledPower,OUTPUT);
delay();
}
void loop() {
if(millis() - lastCheckInTime > postingInterval || lastCheckInTime==) {
checkIn();
}
val=analogRead();
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()+;
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();
Serial.print("\r\n");
delay();
Serial.print("AT+RST\r\n");
delay();
CONNECT=true;
lastCheckInTime=;
}
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();
}
ESP8266 上报数据到贝壳物联的更多相关文章
- Arduino上传数据至贝壳物联并与FPGA进行交互
本篇实现Arduino与FPGA交互,当然也没有什么新的协议,还是基于串口通讯,现在学一个串口通信基本上可以驱动大多数模块了,而且和各种单片机无缝数据交互,Arduino由于其强大的库函数支持,在实现 ...
- ESP8266上报数据到中国移动物联网平台HTTP
#include <HttpPacket.h> #include <ArduinoJson.h> #include <ESP8266WiFi.h> HttpPack ...
- Arduino UNO +ESP8266采集数据上传到贝壳网
集成电路设计大赛赛程将至,我现在还是毫无头绪,然后又报了一个互联网+,比赛报了,东西就必须出来,时间很紧的情况下,所以选择了开源的arduino的进行完成.从开始接触Arduino到完成工程,前前后后 ...
- 国内物联网平台(3):QQ物联智能硬件开放平台
国内物联网平台(3)——QQ物联·智能硬件开放平台 马智 平台定位 将QQ帐号体系.好友关系链.QQ消息通道及音视频服务等核心能力提供给可穿戴设备.智能家居.智能车载.传统硬件等领域的合作伙伴,实现用 ...
- 国内物联网平台初探(三) ——QQ物联·智能硬件开放平台
平台定位 将QQ帐号体系.好友关系链.QQ消息通道及音视频服务等核心能力提供给可穿戴设备.智能家居.智能车载.传统硬件等领域的合作伙伴,实现用户与设备.设备与设备.设备与服务之间的联动. 实现用户与设 ...
- [视频]物联网&集成系统中的物联交互、数据存储、效果展示形成快速解决方案。附:ServerSuperIO 3.6.2 版本发布。
ServerSuperIO v3.6.2版本更新内容: 设备驱动与实时库对接的Tag配置与OPC Client读取数据的配置统一用一个配置文件. 设备驱动继承DeviceDynamic接口的子类支持存 ...
- 5、qq物联开发步骤
1.QQ物联开发步骤 1)测试环境无需申请上线,即可任意调试.意思是什么呢,它是告诉大家,在调试的时候不要点击上面的提交上线,因为目还在调试此设备,一旦上线,QQ物联官方就会来审核你的设备,导致延长研 ...
- TDengine在数益工联工业物联采集平台建设中的初步实践
作者:易永耀 夏杭泰 邓炜兴 公司介绍 数益工联致力于打造基于数据流+价值流的离散制造业数字化软件:应用新一代的物联网技术与丰富的现场交互手段,融合工业工程精益思想,为离散制造业客户的数字化升级提供从 ...
- 以软件定义物联网芯片,以技术融合推动LPWAN2.0泛在物联
作为数字化产业重要的基础设施之一,物联网迎来了黄金发展期.物联网通信技术通过数据的采集.分析.输出,从浅层次的互联工具和产品深化,到成为重塑生产组织方式的基础设施和关键要素,正深刻地改变着传统产业形态 ...
随机推荐
- es的mapping设置
自定义mapping的api PUT test_index { "mappings": { #mappings关键字 "doc": { #type " ...
- yii框架中使用gii的用法
首先在config文件中的 main-local.php中添加一句 'allowedIPs' => ['*'],如下图所示:
- python3 设置滚动条
#!python3#coding=utf-8from selenium import webdriverfrom selenium.webdriver.common.by import Byimpor ...
- PAT 1011 World Cup Betting
1011 World Cup Betting (20 分) With the 2010 FIFA World Cup running, football fans the world over w ...
- HTML 5 <span> 标签
标签定义及使用说明 <span> 用于对文档中的行内元素进行组合. <span> 标签没有固定的格式表现.当对它应用样式时,它才会产生视觉上的变化.如果不对 <span& ...
- 抓包工具Charles的简单使用
一.Charles破解 下载安装及破解方法: 1.下载charles并安装 云盘下载地址:Windows 64bit 32bit 2.安装后先打开Charles一次(Windows版可以忽略此步 ...
- [CodeForces - 614B] B - Gena's Code
B - Gena's Code It's the year 4527 and the tanks game that we all know and love still exists. There ...
- 十九、Spring框架(注解方式测试)
一.注解方式测试 1.注解方式测试使用junit.使用junit-4.12.jar和hamcrest-all-1.3.jar(单元测试包) 把这两个jar包,导入到lib文件夹下. 2.TestSpr ...
- hdu多校1004 Distinct Values
Distinct Values Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): ...
- Oracle 12c新特性之——TABLE ACCESS BY INDEX ROWID BATCHED
Oracle12c开始,我们在获取SQL语句的执行计划时,也会经常看到"TABLE ACCESS BY INDEX ROWID BATCHED"操作,那么,这个操作到底是什么意思呢 ...