设备端接入(ESP32)


一、MicroPython方式

1. MicroPython固件

在ESP32上写入MicroPython的固件,具体请参考站内文件。


2. 用Tonny连接ESP32开发板


3. Wifi连接程序

新建wifi.py文件,复制以下代码

import network
import time

def connect():
	ssid = '***your_ssid***'
	password = '***your_passwd***'
	wlan = network.WLAN(network.STA_IF)
	wlan.active(True)
	wlan.connect(ssid, password)
	while wlan.isconnected() == False:
		print('Waiting for connection...')
		time.sleep(1)
	print('Connected on {ip}'.format(ip = wlan.ifconfig()[0]))

注意:请将ssid和password换成实际的wifi热点和密码。

4. MQTT连接程序

新建mqtt.py,复制以下代码

from umqtt.simple import MQTTClient

MQTT_SERVER = 'iot.xpstem.com'
MQTT_PORT = 1883
MQTT_USER = '******'
MQTT_PASSWD = '******'
MQTT_CLIENT_ID = 'ESP32-CLIENT-001'

def connect():
    client = MQTTClient(MQTT_CLIENT_ID, MQTT_SERVER, MQTT_PORT, MQTT_USER, MQTT_PASSWD, 300)
    client.connect()
    print('Connected to MQTT Broker "{server}"'.format(server = MQTT_SERVER))
    return client

其中MQTT用户名和密码,在设备详情页查看

设备端接入(ESP32)


5. 主程序

创建main.py,复制以下程序

###################################
# 小鹏AIoT 主程序
# author: billy_zh@126.com
###################################
import wifi
import mqtt

# wifi 连接
wifi.connect()
# mqtt 连接
mqtt_client = mqtt.connect()

####################
# 主循环
####################
while True:
    time.sleep(1)

确定以上三个文件都保存至ESP32设备内。

在Thonny中点击运行main.py,

查看窗口输出内容。

二、Arduino C/C++方式

1.Arduino-ESP32开发环境配置

在ArduinoIDE中配置ESP32开发板支持。


2.安装PubSubClient库

在ArduinoIDE中通过库管理安装PubSubClient。


3.复制以下代码到ArduinoIDE

#include <Arduino.h>
#include <WiFi.h>         
#include <PubSubClient.h>   // 2.8 (Nick O'Leary)

char *ssid = "xxx";
char *password = "xxx";
char *mqtt_broker = "iot.xpstem.com";
char *mqtt_username = "xxx";
char *mqtt_password = "xxx";

String chipId = "";

WiFiClient espClient;
PubSubClient mqtt_client(espClient);

/***********************************************************
 ***  连接到WiFi
 **********************************************************/ 
void connectToWiFi() {
    WiFi.begin(ssid, password);
    Serial.print("正在连接 WiFi");
    while (WiFi.status() != WL_CONNECTED) {
        delay(100);
        Serial.print(".");
    }
    Serial.print("\n连接到 WiFi, localIP: ");
    Serial.println(WiFi.localIP());
}

/***********************************************************
 ***  连接到MQTT
 **********************************************************/  
void connectToMQTT() {
    int retryCount = 0;
    while (!mqtt_client.connected()) {
        String client_id = "esp32-client-" + chipId;
        Serial.printf("正在连接小鹏AIoT平台: %s .....\n", mqtt_broker);
        if (mqtt_client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
            Serial.println("连接到小鹏AIoT平台.");
        } else {
            Serial.print("连接失败, rc=");
            Serial.print(mqtt_client.state());
            Serial.println(",5秒后重试。");
            retryCount ++;
            delay(5000);
        }
    }
}

/***********************************************************
 ***  获取芯片ID
 **********************************************************/
String getChipId() {
  uint64_t number = ESP.getEfuseMac();
  unsigned long long1 = (unsigned long)((number & 0xFFFF0000) >> 16);
  unsigned long long2 = (unsigned long)((number & 0x0000FFFF));

  return String(long1, HEX) + String(long2, HEX);
}

void setup() {
  Serial.begin(115200);
  Serial.println();

  chipId = getChipId();
  Serial.printf("ChipId:%s\n", chipId);
  
  // wifi连接
  connectToWiFi();
  // 连接MQTT
  connectToMQTT();
}

void loop() {
  // do something.
  delay(10);
}

4.点击“上传”

打开串口监视器查看输出内容。