之前我们通过O2IOTServer类已经实现了设备的初始化配置,现在我们需要使用配置信息,连接到可以用的WiFi,并连接登录到O2OA服务器。

创建O2IOTClient类

在o2iot目录下创建文件:O2IOTClient.h,代码如下:

#ifndef O2IOTCLIENT_H_
#define O2IOTCLIENT_H_

#include <ESP8266WiFiMulti.h>   //引用ESP8266的WiFi库
#include <ESP8266HTTPClient.h>  //引用ESP8266的HttpClient库
#include <EEPROM.h>             //引用EEPROM库
#include "ArduinoJson.h"        //引用ArduinoJson库

class O2IOTClient {
public:
    //配置信息变量
    String xtoken="";
    String o2host="";
    String o2port="";
    String o2user="";
    String o2pass="";

    bool begin();       //初始化client,连接WiFi,并登录O2OA
    bool connect();     //连接WiFi

    String _doGet(String url);                  //发起http-get请求
    String _doPost(String url, String data);    //发起http-post请求
    String _doPut(String url, String data);     //发起http-put请求

    void getConfig();               //获取设备配置信息
    void parseConfig();             //解析设备配置信息
private:
    ESP8266WiFiMulti WiFiMulti;     //esp8266WiFi对象

    void blink(char n);             //芯片led灯闪烁
    bool _getToken();               //登录到O2OA,并获取token
    char _ssidConfig[128];          //配置信息存储128字节
    char *ssid_name;                //热点名称
    char *ssid_pass;                //热点密码
};
extern O2IOTClient O2_IOTClient;

#endif /* O2IOTCLIENT_H_ */

然后我们需要创建.cpp来实现头文件中定义的方法,所以在o2iot目录下创建文件:O2IOTClient.cpp,代码如下:

#include "O2IOTClient.h"

void O2IOTClient::blink(char n){    //此方法用于让芯片的led灯闪烁n次
    for (char i = 0; i < n; i++) {
        digitalWrite(LED_BUILTIN, LOW);
        delay(100);
        digitalWrite(LED_BUILTIN, HIGH);
        delay(100);
    }
}

bool O2IOTClient::begin() { //开始连接WiFi和登录
    EEPROM.begin(512);      //ESP8266使用EEPROM需要首先调用EEPROM.begin(size)方法
    if (connect()){         //将设备连接到WiFi热点
        blink(2);       //如果成功连接到WiFi让设备led灯闪烁2次
        if (_getToken()){   //登录到O2OA服务器,并获取toekn
            blink(3);       //如果成功登录,并获取到token,让设备led灯闪烁3次
        }   
    }
    return false;
}

void O2IOTClient::getConfig() {     //从EEPROM中获取设备配置信息
    for (int i = 0; i < 128; i++) {
        _ssidConfig[i] = EEPROM.read(i);
    }
}
void O2IOTClient::parseConfig() {   //解析设备配置信息,存储到变量
    if (strchr(_ssidConfig, '|')!=NULL){
        if (_ssidConfig[0] != NULL) {
            ssid_name = strtok(_ssidConfig, "|");
            ssid_pass = strtok(NULL, "|");
            o2user = strtok(NULL, "|");
            o2pass = strtok(NULL, "|");
            o2host = strtok(NULL, "|");
            o2port = strtok(NULL, "|");
        }
    }
}
bool O2IOTClient::connect() {       //连接WiFi热点
    getConfig();
    parseConfig();
    
版权声明:本文为O2OA原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/O2OA/p/14511472.html