概述
〇、参考前必读
本篇文章将一步步的将如何建立树莓派与8266的连接方法告诉您
首先在参考本文之前,您需要准备一下材料
准备材料:
1、一块树莓派 +32GB以上内存卡(版本应该在3B以上,并准备好了系统并能正常进行连接)
2、一块ESP8266(我们将使用Arduino的IDE进行编辑)
3、在太极创客上获取或参考8266编写资料的能力,并注册一个然也物联个人服务器
4、平缓心情,一步步来捏,例如第三点如果不理解,后文也会详细叙述~( ̄▽ ̄)~*
一、关于个人物联网服务器注册
请您先打开然也平台,其他的百度、阿里云个人服务器也可以,此处仅作示范)
图 1.1
注册完成后您就获得
自己的ID账号 、密码、八个设备名称,请您务必牢记(可能平台需要一两天才会批准您的审核)
二、关于树莓派系统的安装
首先我推荐您使用树莓派官方提供的镜像安装软件 Raspberry Pi Imager
图 2.1
树莓派系统界面将如下图所示,请您按需选择您所需的系统,本次以这款系统为例进行操作
当您完成此步骤时,再仔细阅读下一个步骤哦!
三、连接上我的树莓派
如何连接树莓派,这是一个永远的难题hhh
乐死自己,对于一名新手小白,我还是推荐购买一块小小的HDMI屏幕,这将无疑降低很多难度,多小的屏幕都好!!
如果您是无屏幕连接,我推荐您阅读其他的树莓派无屏幕连接的教程,此处不再赘述(虽然我很抱歉,但这篇文章初衷还是尽快让您连接您的8266与树莓派)
好了下面将讲解连上树莓派的第一件事
1、连接上一个WiFi热点、确保后续无屏幕时也能够进行远程桌面连接(VNC / PUTTY /微软自带)
2、注意了接下来将介绍一些Linux系统基本操作指令,这些指令类似于微软的CMD界面的指令
指令1、 sudo
sudo
这个指令是获得一定的管理权限,命令树莓派做指令的事情
指令2、
sudo nano
sudo nano 这个指令是以文本编辑的形式打开某个文件
对于一个文本编辑来说 CTRL+O 然后按回车键是将当前所有文字写入这个文件
CTRL+X 可以关闭当前nano编辑界面
3、下面我们将正式开始做树莓派的配置工作!
首先打开您的树莓派的命令提示符
依次按顺序输入以下代码,注意您的镜像源如果可以正常下载就无需更换下载源,如果异常请更换清华科大镜像源(可以理解为更换获取渠道!!)
好了下面开始代码块,注意,一句一句输入进去,success再下一句
1.sudo apt-get update
2.sudo apt-get install mosquitto
3.sudo apt-get install python-pip #如果此处提醒安装失败可以看是不是提示改成 pip3 或者
python3 输入进去
4.sudo pip install paho-mqtt
5.sudo apt-get install mosquitto mosquitto-clients
6.sudo nano /etc/mosquitto/mosquitto.conf 这步是打开一个文件
7.将里面替换成
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
pid_file /var/run/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
log_dest topic
log_type error
log_type warning
log_type notice
log_type information
connection_messages true
log_timestamp true
include_dir /etc/mosquitto/conf.d
---------------------------------------CTRL+X 回车 保存 而后CTRL+X 关闭
8.sudo /etc/init.d/mosquitto start
好了如果到此为止,都是成功的恭喜你又近了一步!!
四、开始互联8266与树莓派
这是python例程,注意有一些需要修改的地方例如设备id,WiFi账号及密码。请不要一股脑复制完事,需修改的地方当然我也会标出!!
注意!!这个例程可以嵌入您的视觉处理等代码内进行传输结果!!
Warning!!!!!
所有注释的地方请务必仔细阅读,否则您可能错失一个学习并且完成互联的机会!!
这个代码您可以进行修改,比如把内容单独def一个msg函数,从哪获取您需要发布的内容!!
#这是树莓派的代码 by MKDHXY
import paho.mqtt.client as mqtt
import os
import time
HOST = 'iot.ranye-iot.net' #这里是然也平台地址,若您使用别的平台请进行更改,注意本地ip也可
PORT = 1883 #这是您的端口号 默认1883
topic = "MKDHXY/test" #这是您的树莓派作为发布者发布的主题设置,是发布的主题!!!看清
Subtopic="MKDHXY/Subtest #这是您的树莓派作订阅者、订阅的主题设置,是订阅的主题!!!看清
client_id = 'MKDHXY_X_id' #注意了这是您的设备id,您可以联网八个设备,id均需要不同
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe(Subtopic)
def on_message(client, userdata, msg):
print(msg.topic+" "+msg.payload.decode("utf-8"))
# 消息处理
def publich():
result = client.publish(topic, msg)
# result: [0, 1]
status = result[0]
if status == 0:
print("Send `{}` to topic `{}`".format(msg,topic))
else:
print("Failed to send message to topic {}".format(topic))
# ClientId不能重复,也可不传入
client = mqtt.Client(client_id)
client.username_pw_set("**账号****", "***密码****") # 这里请替换成您的账号及密码!!!!!!
client.on_connect = on_connect
client.on_message = on_message
client.connect(HOST, PORT, 60)
# 订阅一个主题并且发布一个主题
client.subscribe(Subtopic) #这里必须修改成为您所订阅的主题
client.publish(topic, "***内容****") #这里需要修改成为您作为发布者发布的主题的内容
client.loop_forever()
五、ESP8266的代码
相信您已经安装要求下载了arduino ide 了,接下来我将参考太极创客的代码将告诉您如何按需修改
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266WebServer.h>
#include <FS.h>
#include <PubSubClient.h>
// 设置wifi接入信息(请根据您的WiFi信息进行修改)
const char* ssid = "*****WIFI名称******";
const char* password = "*****WIFI密码******";
const char* mqttServer = "iot.ranye-iot.net";
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
// ****************************************************
// 注意!以下需要用户根据然也物联平台信息进行修改!否则无法工作!
// ****************************************************
const char* mqttUserName = "*******"; // 服务端连接用户名(需要修改)
const char* mqttPassword = "*******"; // 服务端连接密码(需要修改)
const char* clientId = "MKDHXY_**_id"; // 客户端id (需要修改)
const char* subTopic = "MKDHXY/myT*****"; // 订阅主题(需要修改)
const char* pubTopic = "MKDHX********"; // 订阅主题(需要修改)
const char* willTopic = "MKDHXY/led_yz"; // 遗嘱主题名称 这是指,离线前最后一句话
// ****************************************************
//遗嘱相关信息
const char* willMsg = "esp8266 offline"; // 遗嘱主题信息
const int willQos = 0; // 遗嘱QoS
const int willRetain = false; // 遗嘱保留
const int subQoS = 1;
const bool cleanSession = false;
bool ledStatus = HIGH;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, ledStatus);
Serial.begin(9600);
//设置ESP8266工作模式为无线终端模式
WiFi.mode(WIFI_STA);
// 连接WiFi
connectWifi();
// 设置MQTT服务器和端口号
mqttClient.setServer(mqttServer, 1883);
mqttClient.setCallback(receiveCallback);
// 连接MQTT服务器
connectMQTTserver();
}
void loop() {
// 如果开发板未能成功连接服务器,则尝试连接服务器
if (!mqttClient.connected()) {
connectMQTTserver();
}
// 处理信息以及心跳
mqttClient.loop();
}
// 连接MQTT服务器并订阅信息
void connectMQTTserver(){
// 根据ESP8266的MAC地址生成客户端ID(避免与其它ESP8266的客户端ID重名)
/* 连接MQTT服务器
boolean connect(const char* id, const char* user,
const char* pass, const char* willTopic,
uint8_t willQos, boolean willRetain,
const char* willMessage, boolean cleanSession);
若让设备在离线时仍然能够让qos1工作,则connect时的cleanSession需要设置为false
*/
if (mqttClient.connect(clientId, mqttUserName,
mqttPassword, willTopic,
willQos, willRetain, willMsg, cleanSession)) {
Serial.print("MQTT Server Connected. ClientId: ");
Serial.println(clientId);
Serial.print("MQTT Server: ");
Serial.println(mqttServer);
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);
if ((char)payload[0] == '1') { // 如果收到的信息以“1”为开始
ledStatus = LOW;
digitalWrite(BUILTIN_LED, ledStatus); // 则点亮LED。
} else {
ledStatus = HIGH;
digitalWrite(BUILTIN_LED, ledStatus); // 否则熄灭LED。
}
pubMQTTmsg();
}
// 订阅指定主题
void subscribeTopic(){
if(mqttClient.subscribe(subTopic, subQoS)){
Serial.print("Subscribed Topic: ");
Serial.println(subTopic);
} else {
Serial.print("Subscribe Fail...");
}
}
// 发布信息
void pubMQTTmsg(){
char* pubMessage;
if (ledStatus == LOW){
pubMessage = "LED ON";
} else {
pubMessage = "LED OFF";
}
// 实现ESP8266向主题发布信息
if(mqttClient.publish(pubTopic, pubMessage)){
Serial.println("Publish Topic:");Serial.println(pubTopic);
Serial.println("Publish message:");Serial.println(pubMessage);
} else {
Serial.println("Message Publish Failed.");
}
}
// 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("");
}
以上就完成了您的设置
六、大功告成!请在进的树莓派与8266之间开始您的通讯吧!!
最后
以上就是高高哈密瓜为你收集整理的树莓派与ESP8266-MQTT无线通信的全部内容,希望文章能够帮你解决树莓派与ESP8266-MQTT无线通信所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复