admin管理员组

文章数量:1619275

目录

  • 极简连接WIFI
  • 模拟设备连接阿里云
  • ESP32 连接阿里云


以下代码通过 Arduino 语言实现

极简连接WIFI

#include <WiFi.h>

// 这里添加要连的wifi名称和密码
const char* ssid     = "";
const char* password = "";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while(WiFi.status() != WL_CONNECTED){
    delay(500);
    Serial.print(".");
  }
  Serial.println("WIFI CONNECTED!");
}

void loop() {
}

模拟设备连接阿里云

参考:ESP32CAM连接阿里云物联网平台

通过模拟设备连接阿里云,是为了测试板子和云平台间的通信。

  • 前期准备
    • 在阿里云创建自己的项目:参考这篇
    • 下载 mqttfx 工具:参考这篇
    • 下载 技小新-MQTT单片机编程小工具
  • MQTT单片机编程小工具 上的操作
    • SN/MAC 不用管
    • 通过阿里云上的此界面(第三步的设备调试界面中有个“查看”测试设备的操作),获取 product_key、device_name、device_secret,并在小工具上修改,然后点击生成基本信息,获得 ClientID、UserName、Password

  • mqtt.fx 上的设置
    • 打开 Edit Connection Profiles 界面(Extras - Connection Profiles)
    • Broker Address (不用变):iot-as-mqtt-shanghai.aliyuncs
    • Broker Port (不用变):1883
    • 剩下三行填写上一操作生成的

  • 下行通信(阿里云发送,MQTT.fx接收)
    • 在阿里云平台上查看发布和订阅的相关 Topic
    • 在 MQTT.fx 的 subscribe 输入框输入订阅的 topic 后,点击 subscribe
    • 在阿里云的在线调试界面发送指令,看 MQTT.fx 是否能收到


  • 下行通信(MQTT.fx发送,阿里云接收)
    • 在 MQTT.fx 的 publish 输入框输入发布的 topic 后,在文本框写入以下代码,然后点击 publish
{
    "params":{
    "brightness":78,}
}

“brightness” 根据标识符修改


在云平台上即可看到效果

ESP32 连接阿里云

报错:MQTT Connect err:2 处理方法

  • 修改库文件:C:\Users\Administrator\Documents\Arduino\libraries\PubSubClient\src\PubSubClient.h
  • 找到: MQTT_MAX_PACKET_SIZE,将256修改为1024,再找到MQTT_KEEPALIVE,将15修改为60。

参考:esp32(arduino)接入阿里云MQTT服务器
具体代码粘贴如下,注意修改define

#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>

// 这里添加要连的wifi名称和密码
const char* ssid     = "";
const char* password = "";

/* 设备证书信息,根据情况修改*/
#define PRODUCT_KEY       ""
#define DEVICE_NAME       ""
#define DEVICE_SECRET     ""
#define REGION_ID         ""

#define CLIENT_ID         ""
#define MQTT_PASSWD       ""

#define ALINK_BODY_FORMAT         "{\"params\":%s}"
#define ALINK_TOPIC_PROP_POST     "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"

/* 线上环境域名和端口号,不需要改 */
#define MQTT_SERVER       PRODUCT_KEY ".iot-as-mqtt." REGION_ID ".aliyuncs"
#define MQTT_PORT         1883
#define MQTT_USRNAME      DEVICE_NAME "&" PRODUCT_KEY

WiFiClient espClient;
PubSubClient  client(espClient);

void WiFiInit()
{
  WiFi.begin(ssid, password);
  while(WiFi.status() != WL_CONNECTED){
    delay(500);
    Serial.print(".");
  }
  Serial.println("WIFI CONNECTED!");
}

// 连接MQTT,每隔5s自动重连
void mqttCheckConnect()
{
  while(!client.connected())
  {
    Serial.println("Connecting to MQTT Server ...");
    if(client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD))
    {
      Serial.println("MQTT Connected!");
    }
    else
    {
      Serial.print("MQTT Connect err:");
      Serial.println(client.state());
      delay(5000);
    }
  }
}

// publish(ESP32发送,阿里云接收)
void mqttIntervalPost()
{
  char param[32];     // 存放参数数据
  char jsonBuf[128];  // 存放json格式数据

  sprintf(param, "{\"brightness\":%d}", 32); 
  sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
  Serial.println(jsonBuf);
  if(client.publish(ALINK_TOPIC_PROP_POST, jsonBuf))
  {
    Serial.println("Publish success!");
  }
  else
  {
    Serial.println("Publish error!");
  }
}

// subscribe(ESP32接收,阿里云发送)
void callback(char *topic, byte *payload, unsigned int length)
{
  // 将收到的信息回传给串口
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  payload[length] = '\0';
  Serial.println((char *)payload);

  // 将 method、id、params 解析出来
  StaticJsonBuffer<400> jsonBuffer1;
  JsonObject& root1 = jsonBuffer1.parseObject((char *)payload);
  if (!root1.success()) {
    Serial.println("parseObject()1 failed");
    Serial.println("END");
    return;
  }
  const char* mmethod = root1["method"];
  Serial.println(mmethod);
  long mid = root1["id"];
  Serial.println(mid);
  String message = root1["params"];
  Serial.println(message);

  // 将 params中自定的参数解析出来
  StaticJsonBuffer<400> jsonBuffer2;
  JsonObject& root2 = jsonBuffer2.parseObject(message);
  if (!root2.success()) {
    Serial.println("parseObject()2 failed");
    Serial.println("END");
    return;
  }
  int brightness = root2["brightness"];
  Serial.println(brightness);
}

void setup() 
{
  Serial.begin(115200);
  WiFiInit();
  client.setServer(MQTT_SERVER, MQTT_PORT);
  client.setCallback(callback);
}

void loop() 
{
  if(!client.connected())
  {
    mqttCheckConnect();

    mqttIntervalPost();
  }
  client.loop();
}

本文标签: 阿里路程设备wifi