8266通过mqtt与巴法云平台建立联系(示例程序

先看完整代码 

/*
  Time:20210328
  Author: 巴法科技
  QQ群:824273231
  项目示例:通过发送on或off控制开关,温湿度上传
*/

#include <ESP8266WiFi.h>//默认,加载WIFI头文件
#include "PubSubClient.h"//默认,加载MQTT库文件
#include <SimpleDHT.h>//dht11库文件


const char* ssid = "danggui";                  //修改,修改为你的路由的WIFI名字
const char* password = "danggui324";           //修改为你的WIFI密码
const char* mqtt_server = "bemfa.com";       //默认,MQTT服务器地址
const int mqtt_server_port = 9501;          //默认,MQTT服务器端口
#define ID_MQTT  "7d5e39e3512c4b25166e9c9e114ec4b3"   //mqtt客户端ID,修改为你的开发者密钥
const char*  topic = "led";                       //Led主题名字,可在巴法云控制台自行创建,名称随意
const char * dhttopic = "temp";                 //温湿度主题名字,可在巴法云mqtt控制台创建
int pinDHT11 = 02;                         //dht11传感器引脚输入
int B_led = 14;                           //控制的led引脚
long timeval = 3 * 1000;                  //上传的传感器时间间隔,默认3秒



String ledstatus = "off";//led状态默认off
long lastMsg = 0;//时间戳
SimpleDHT11 dht11(pinDHT11);//dht11初始化
WiFiClient espClient;
PubSubClient client(espClient);//mqtt初始化


//灯光函数及引脚定义
void turnOnLed();
void turnOffLed();



void setup_wifi() {
  delay(10);
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  String Mqtt_Buff = "";
  for (int i = 0; i < length; i++) {
    Mqtt_Buff += (char)payload[i];
  }
  Serial.print(Mqtt_Buff);
  Serial.println();

  // Switch on the LED if an 1 was received as first character
  if (Mqtt_Buff == "on") {//如果接收字符on,亮灯
    turnOnLed();//开灯函数

  } else if (Mqtt_Buff == "off") {//如果接收字符off,亮灯
    turnOffLed();//关灯函数
  }
  Mqtt_Buff = "";
}

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (client.connect(ID_MQTT)) {//连接mqtt
      Serial.println("connected");
      client.subscribe(topic);//修改,修改为你的主题
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}


void setup() {
  pinMode(B_led, OUTPUT);

  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, mqtt_server_port);
  client.setCallback(callback);
  digitalWrite(B_led, HIGH);
}
void loop() {
  if (!client.connected()) {//判断mqtt是否连接
    reconnect();
  }
  client.loop();//mqtt客户端


  long now = millis();//获取当前时间戳
  if (now - lastMsg > timeval) {//如果达到3s,进行数据上传
    lastMsg = now;


    // read without samples.
    byte temperature = 0;
    byte humidity = 0;
    int err = SimpleDHTErrSuccess;
    if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
      Serial.print("Read DHT11 failed, err="); Serial.println(err); delay(1000);
      return;
    }


    String  msg = "#" + (String)temperature + "#" + (String)humidity + "#" + ledstatus; //数据封装#温度#湿度#开关状态#
    client.publish(dhttopic, msg.c_str());//数据上传
  }



}

//打开灯泡
void turnOnLed() {
  ledstatus = "on";
  Serial.println("turn on light");
  digitalWrite(B_led, HIGH);
}
//关闭灯泡
void turnOffLed() {
  ledstatus = "off";
  Serial.println("turn off light");
  digitalWrite(B_led, LOW);
}

 利用了pubsubclient库,将温湿度数据和开关状态发送到云平台上。

pubsubclient库:一个第三方的arduino库,基于mqtt协议和服务器连接。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要将ESP8266连接到阿里云,需要先创建一个阿里云账户并设置IoT平台,然后在IoT平台中创建一个设备和一个Topic,并为设备生成一个身份验证信息(DeviceSecret)。 然后,使用ESP8266开发板和MQTT库(例如PubSubClient)连接到阿里云。下面是连接步骤: 1. 在代码中引用MQTT库和WiFi库。 2. 设置WiFi连接参数并连接到WiFi网络。 3. 设置阿里云MQTT服务器地址和端口号。 4. 设置设备ID和DeviceSecret。 5. 连接到MQTT服务器并订阅Topic。 6. 在循环中发送和接收MQTT消息。 下面是一些示例代码,你可以根据自己的情况进行修改: ```C++ #include <ESP8266WiFi.h> #include <PubSubClient.h> // WiFi连接参数 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; // 阿里云MQTT服务器地址和端口 const char* mqtt_server = "your_server_address"; const int mqtt_port = 1883; // 设备ID和DeviceSecret const char* client_id = "your_device_id"; const char* device_secret = "your_device_secret"; // Topic const char* topic = "/your_topic"; // WiFi客户端 WiFiClient espClient; // MQTT客户端 PubSubClient client(espClient); void setup() { // 启动串口 Serial.begin(115200); // 连接WiFi网络 WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("WiFi connected"); // 设置MQTT服务器和端口 client.setServer(mqtt_server, mqtt_port); // 设置MQTT回调函数 client.setCallback(callback); // 连接到MQTT服务器 if (!client.connect(client_id, device_secret)) { Serial.println("Failed to connect to MQTT server"); return; } // 订阅Topic client.subscribe(topic); } void loop() { // 发送MQTT消息 client.publish(topic, "Hello from ESP8266"); // 接收MQTT消息 client.loop(); } // MQTT回调函数 void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message received: "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); } ``` 在你的阿里云控制台中,你可以查看设备的连接状态和收到的消息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永瞬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值