projectuser
2019-07-08 827102212c4403e5c454b77bc44b40310f23fa34
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#ifndef aliIotLink_H
#define aliIotLink_H
 
#include <Arduino.h>
 
#include "modules/mqtt/PubSubClient.h"
#include "modules/Crypto/SHA256.h"
#include "modules/Crypto/Crypto.h"
 
#define MQTT_Topic_Quantity  2
 
static const char _ServerUrl[] PROGMEM = "iot-as-mqtt.cn-shanghai.aliyuncs.com";
static const char _ClientIdSuffix[] PROGMEM = "|securemode=3,signmethod=hmacsha256,timestamp=";
 
class AliIotLink
{
    public:
        AliIotLink(PubSubClient& client);
        void begin();
        void begin(String __DeviceName,String __ProductKey,String __DeviceSecret);
        void writeUrl(String __ServerUrl);    // 设置登录网址
        void writePort(uint16_t __port);   //服务器端口
        void writeID(String __Id);    //设备ID
        void writeDeviceName(String __DeviceName);  // 设置设备名称
        void writeProductKey(String __ProductKey);
        void writeDeviceSecret(String __DeviceSecret);
        
        void  generateClientId();  //获取登录的设备ID
 
        
        
        bool connect();   //链接服务器
        void subTopic(String topic);    //配置订阅topic
        void publish(const char* topic, const char * payload);  //推送消息
        void setCallback(MQTT_CALLBACK_SIGNATURE);//注册回调函数
        void reconnect();
        void loop();  //心跳维持与重连
        int state();   //错误消息返回
        
    private:
        //私有函数
        
        void HMAC(char const *key, byte KeySize, char const *data, byte dataSize, byte *hashData);
 
        void subscribe(const char* topic);  //监听Topic
        String readClientId();  //获取登录的设备ID
        String readUrl();  
        String readUser();
        String readPasswd();
        //登录用四元素
        
        //私有对象
        PubSubClient* _client;    //mqtt接口
        //私有变量
        String TopicName[MQTT_Topic_Quantity];
        //String _ServerUrl = "iot-as-mqtt.cn-shanghai.aliyuncs.com";
        String _Id;
        //String _ClientIdSuffix = "|securemode=3,signmethod=hmacsha256,timestamp=";
        
        uint16_t _port = 1883;
        uint16_t Times;
        uint8_t TopicNum =0;   //topic计数器
        //
        String _URL;
        String _ClientId;
        String _Username;
        String _PasswdHash;
        //三元素
        String _DeviceName;    
        String _ProductKey;
        String _DeviceSecret;
};
 
 
 
 
#endif