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提供了大量能使我们快速便捷地处理数据的函数和方法。