1. #include <aliIotLink.h>
    2. #include <ESP8266WiFi.h>
    3. #include <ArduinoJson.h>
    4. #include <Wire.h>
    5. #include <Adafruit_BMP085.h>
    6. Adafruit_BMP085 bmp;
    7. const char* ssid = "OCROBOT";
    8. const char* password = "jikegongfang";
    9. String updateAlinkJson(uint16_t _id, JsonObject &_AliIotJson);
    10. void working(uint16_t delayTime);
    11. WiFiClient espClient; //实例化 wifi网络
    12. PubSubClient client(espClient); //将网络传入MQTT
    13. AliIotLink aliLink(client); //将mqtt传入服务
    14. bool led_status = 0; //默认是关闭的
    15. //回调函数
    16. void Callbacks(char* topic, byte* payload, unsigned int length)
    17. {
    18. String LED_topic = "/sys/a1agPKQ3fSf/sensor1/thing/service/property/set";
    19. if (strcmp(topic, LED_topic.c_str()) == 0)
    20. {
    21. StaticJsonBuffer<128> jsonBuffer;
    22. JsonObject& payloadData = jsonBuffer.parseObject(payload);
    23. led_status = payloadData["params"]["led"]; //获取开关设置信息
    24. digitalWrite(D1,led_status);
    25. Serial.println(led_status);
    26. }
    27. }
    28. void setup()
    29. {
    30. Serial.begin(115200);
    31. bmp.begin(); //传感器初始化
    32. pinMode(D1, OUTPUT); //初始化led灯
    33. WiFi.mode(WIFI_STA); //配置为客户端模式
    34. WiFi.begin(ssid, password); //初始化并且链接wifi
    35. while (WiFi.status() != WL_CONNECTED) {
    36. delay(500);
    37. Serial.print(".");
    38. }
    39. //aliLink.subTopic("/sys/a1agPKQ3fSf/sensor1/thing/service/property/set"); //订阅
    40. //aliLink.subTopic("/sys/a1agPKQ3fSf/sensor1/thing/event/property/set_reply"); //订阅
    41. //阿里云初始化
    42. aliLink.setCallback(Callbacks);
    43. aliLink.begin("sensor1", "a1agPKQ3fSf", "J0lvZSntI0ZYfpqkQ4h40OU7WOxoAYgH"); //完成初始化配置 三元素(DeviceName,ProductKey,DeviceSecret)
    44. }
    45. void loop()
    46. {
    47. if (aliLink.state() != 0)
    48. {
    49. Serial.println(aliLink.state());
    50. }
    51. aliLink.loop();
    52. working(5000); //定时上报业务(15秒一次上报)
    53. }
    54. // 构建Alink协议的要求
    55. String updateAlinkJson(uint16_t _id, JsonObject &_AliIotJson)
    56. {
    57. StaticJsonBuffer<256> jsonBuffer;
    58. JsonObject& AlinkJson = jsonBuffer.createObject();
    59. AlinkJson["id"] = _id;
    60. AlinkJson["version"] = "1.0";
    61. AlinkJson["params"] = _AliIotJson;
    62. //AlinkJson["method"] = "/sys/a1agPKQ3fSf/sensor1/thing/event/property/post";
    63. AlinkJson["method"] = "thing.event.property.post";
    64. String JsonStr;
    65. AlinkJson.printTo(JsonStr);
    66. return JsonStr;
    67. }
    68. //定时上报传感器数据与状态
    69. void working(uint16_t delayTime)
    70. {
    71. uint32_t thisTime = millis();
    72. if ((thisTime % delayTime) == 0)
    73. {
    74. StaticJsonBuffer<130> jsonBuffer;
    75. JsonObject& paramsJson = jsonBuffer.createObject();
    76. //paramsJson["led"] = led1;
    77. paramsJson["temperature"] = bmp.readTemperature();
    78. paramsJson["atmosphere"] = bmp.readPressure();
    79. String data = updateAlinkJson(random(1, 100), paramsJson);
    80. char outputTopic[] = "/sys/a1agPKQ3fSf/sensor1/thing/event/property/post" ;
    81. aliLink.publish(outputTopic, data.c_str());
    82. //Serial.println(data);
    83. }
    84. }