esp32入门

esp32入门

本文章针对自己搭建的服务器


前言

第一种
https://docs.emqx.com/zh/enterprise/v4.4/getting-started/install-ee.html#ubuntu
在这里插入图片描述

安装好后输入sudo emqx start
第二种
官网!!!!
https://www.emqx.io/zh/downloads

`

一、pandas是什么?

接下来我们以ubuntu作为我们的服务器,我们先ifconfig获取我们ubuntu的ip
然后在windows下输入http://ubuntu的ip:18083/
初始账号密码是admin 跟public
进去后会有这样的界面

在这里插入图片描述

我们可以在这里设置我们界面的语言
在这里插入图片描述
在这设置我们的连接信息
在这里插入图片描述
1区是我们的连接区,他会自动设置,不用理他,我们点击2的连接
然后在3区设置我们的话题,4区是发布的话题,5区是我们的数据接收区

在这里插入图片描述

二、使用步骤

1.代码

在此之前我们必须得确定我们esp32跟我们的ubuntu在同一网段,这里我们以上传dht11为例

代码如下(示例):

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

#include <DHT.h>
#include <DHT_U.h>
#define DHTPIN 4   
#define DHTTYPE DHT11  
DHT dht(DHTPIN, DHTTYPE);  
  float h ;   
  float t ; 
StaticJsonDocument<200> sensor_json;
 String realmsg="";
int LED=2;
// 设置wifi接入信息(请根据您的WiFi信息进行修改)
const char* ssid = "smp";
const char* password = "123456789";
const char* mqttServer = "192.168.222.160";//本机ip地址
//发布的消息字段
typedef struct {
  int msg1;
  int msg2;
  int msg3;
}msg;
int count=0;//发布消息间隔
// 如以上MQTT服务器无法正常连接,请前往以下页面寻找解决方案
// http://www.taichi-maker.com/public-mqtt-broker/
//------------------全局变量定义-----------------
msg mymsg={123,45,6};//定义消息结构体
 
Ticker ticker;
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
//------------------全局变量定义-----------------
void tickerCount(){//Ticker回调函数
  count++;
  //数据测试
  static int a=0;
  a++;
  printf("count  :%d\n",h);

sensor_json["msg1"] = h;
sensor_json["msg2"] =t;
sensor_json["msg3"] = 98;
serializeJson(sensor_json, realmsg);
}
 
void pubmsg( const String &topicString, const  String &messageString){
  char publishTopic[topicString.length() + 1];  
  strcpy(publishTopic, topicString.c_str());
  char publishMsg[messageString.length() + 1];   
  strcpy(publishMsg, messageString.c_str());
  
  // 实现ESP8266向主题发布信息
  if(mqttClient.publish(publishTopic, publishMsg)){
    Serial.println("Publish Topic:");Serial.println(publishTopic);
    Serial.println("Publish message:");Serial.println(publishMsg);    
  } else {
    Serial.println("Message Publish Failed."); 
  }
}
void setup() {
  pinMode(LED, OUTPUT);     // 设置板上LED引脚为输出模式
  digitalWrite(LED, LOW);  // 启动后关闭板上LED
  Serial.begin(115200);               // 启动串口通讯
 
  // Ticker定时对象
  ticker.attach(2, tickerCount); //每过2s调用其回调函数
  
  //设置ESP8266工作模式为无线终端模式
  WiFi.mode(WIFI_STA);
  
  // 连接WiFi
  connectWifi();
  
  // 设置MQTT服务器和端口号
  mqttClient.setServer(mqttServer, 1883);
  mqttClient.setCallback(receiveCallback);
 
  // 连接MQTT服务器
  connectMQTTserver();

  dht.begin(); 
}
 
void loop() {
  if (mqttClient.connected()) { // 如果开发板成功连接服务器
   if (count >= 2){
      pubmsg("device/date",realmsg);
      realmsg="";
      count = 0;
    }
    
    mqttClient.loop();          // 处理信息以及心跳   
  } else {                      // 如果开发板未能成功连接服务器
    connectMQTTserver();        // 则尝试连接服务器
  }
  h = dht.readHumidity();   
  t = dht.readTemperature(); 
  Serial.print("相对湿度: ");   
  Serial.print(h);
  Serial.println(" %RH");
  Serial.print("温度: ");
  Serial.print(t);
  Serial.println(" °C");
  delay(100);
  
}
 
// 连接MQTT服务器并订阅信息
void connectMQTTserver(){
  // 根据ESP8266的MAC地址生成客户端ID(避免与其它ESP8266的客户端ID重名)
  String clientId = "esp8266-" + WiFi.macAddress();
 
  // 连接MQTT服务器
  if (mqttClient.connect(clientId.c_str())) { 
    Serial.println("MQTT Server Connected.");
    Serial.println("Server Address:");
    Serial.println(mqttServer);
    Serial.println("ClientId: ");
    Serial.println(clientId);
    subscribeTopic(); // 订阅指定主题
  } else {
    Serial.print("MQTT Server Connect Failed. Client State:");
    Serial.println(mqttClient.state());
    delay(5000);
  }   
}
// 收到信息后的回调函数
void receiveCallback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message Received [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println("");
  Serial.print("Message Length(Bytes) ");
  Serial.println(length);
  int temp=0;
  while(*topic){
    temp++;
    topic++;
  }
  Serial.println("主题长度:");
  Serial.println(temp);
  if(temp>11){
    if((char)topic[11]=='1'){
          if ((char)payload[0] == 'O' && (char)payload[1] == 'F') {     // 如果收到的信息以“1”为开始
            digitalWrite(LED, LOW);  // 则点亮LED。
          } else {                           
            digitalWrite(LED, HIGH); // 否则熄灭LED。
          }
    }
  }
}
 
// 订阅指定主题
void subscribeTopic(){
 
 
  
  // 通过串口监视器输出是否成功订阅主题1以及订阅的主题1名称
  if(mqttClient.subscribe("device/dev/#")){
    Serial.println("Subscrib Topic:");
    Serial.println("device/action");
  } else {
    Serial.print("Subscribe Fail...");
  }  
 
  // 通过串口监视器输出是否成功订阅主题2以及订阅的主题2名称
     
}
 
// ESP8266连接wifi
void connectWifi(){
 
  WiFi.begin(ssid, password);
 
  //等待WiFi连接,成功连接后输出成功信息
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi Connected!");  
  Serial.println(""); 
}

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值