ESP8266+UNO利用贝壳物联平台进行数据交换(2)上传检测数据

利用ESP8266上传检测数据

1、器材:

arduino UNO;
esp8266-01(已成功设置透传);
杜邦线;
面包板;
10k电阻;
电位器。

2、接线:

ESP8266-01 ARDUINO
VCC——————3.3V;
GND——————GND;
TX———————RX;
RX———————TX;
CH_DP—–电阻—–3.3v.

电位器(三端) arduino
左端——————————5V;
右端—————————GND;
中端——————————A0;

3、贝壳物联代码下载

https://github.com/bigiot/bigiotArduino/archive/master.zip

解压后,将libraries/aJson文件夹全部复制到Arduino IDE的库文件夹内。
Windows一般是复制该文件夹到安装位置 /Arduino/libraries中;
Linux一般是/usr/share/arduino/libraries
这是本人的ajson位置
ESP8266+UNO利用贝壳物联平台进行数据交换(2)上传检测数据_第1张图片

4、贝壳物联创建设备,创建接口

这里的是模拟量接口

5、代码

/*
注意要填入ID   KEY   接口ID
这个是由下载的贝壳物联官方代码wendu.ino改过来的
可以通过添加需要的变量和公式收集你需要收集的数据
*/
#include 
//=============  此处必须修改============
String DEVICEID = "XXXX"; // 你的设备ID=======
String APIKEY = "fXXXXX"; // 设备密码==
String INPUTID = "XXXX"; //接口ID==============
//=======================================
const int data = 0;// 电位器 接 A0
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() {
  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 dat;//定义变量
    dat = analogRead( data ); // 读取电位器的模拟值并赋值给dat
    
    
    update1(DEVICEID, INPUTID, dat);
    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("\"}}");
}

6、成果图:

ESP8266+UNO利用贝壳物联平台进行数据交换(2)上传检测数据_第2张图片

你可能感兴趣的:(arduino学习,ESP8266)