IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 基于MQTT百度天工服务器,实现微信小程序控制ESP8266,完成遥控小车的简单控制 -> 正文阅读

[嵌入式]基于MQTT百度天工服务器,实现微信小程序控制ESP8266,完成遥控小车的简单控制

目录

前言

一、准备工具

二、百度天工物联网平台的搭建

三、Arduino IDE 环境的搭建和代码

四、微信小程序的搭建和代码


前言

基于MQTT协议借助百度天工物联网平台,通过Arduino IDE烧录程序,实现微信小程序下发指令到ESP8266 Node MCU,从而简单控制小车的前进、后退、左右转。

作为一个实打实的新手,自己对这方面可以说是完全不了解。我在看了B站的视频以及很多博客之后,最后选择跟着安信可科技发布的B站视频一步步来做:https://www.bilibili.com/video/BV1W7411o7cg

当然,这个视频的发布也在一年前了,现在会有一些内容上的更新,我会在下面提及。我在跟着安装IDE环境的时候并未成功,最后在Arduino IDE上烧录的程序。另外还有一些我遇到的问题和坑都会在下文中进行说明。


一、准备工具

二、百度天工物联网平台的搭建

在打开物接入平台的功能后,进入控制台。

?创建项目,选择地域,填写自己的项目名称以及描述,选择项目类型为数据型。

创建完项目之后,点击蓝色项目名称进入项目列表

?

?创建策略,如果需要微信端下发指令到ESP8266端,同时需要微信端接受8266的反馈信息,则创建两个主题分别由微信端和8266端订阅和发布,这里要注意的是:微信端订阅的主题是8266端要发布的主题,同样8266端订阅的主题是微信端发布的主题。

创建身份,选择密码验证,点击下一步,选择刚刚创建的策略,点击下一步完成身份的创建。保存好身份密匙,这是8266和微信小程序连接MQTT服务器的密码。

?

?

?点击用户列表创建用户,首先创建微信小程序端用户,选择身份为刚刚创建的身份以及刚刚创建的策略。同样,创建8266端用户。

?

?至此,服务器基本搭建完成。

三、Arduino IDE 环境的搭建和代码

由于要实现微信小程序远程遥控小车的功能需要WIFI功能的参与,所以需要对Arduino配置WiFi环境。

打开Arduino IDE,点击工具——>开发板——>开发板管理器,输入ESP8266,然后下载出现的8266库。需要注意的是由于这里是在Arduino的后台官网下载,所以下载可能会失败,而且不止一次,我的解决办法是当下载失败,就是出现红色错误的时候,断开无线网,连接自己的手机热点,即只要下载不动了,就在WiFi和手机热点之间来回切换,反复横跳。所用流量大概在300M左右。

?下载完成后,点击工具——>开发板,选择NodeMcu 1.0即可。

?接着,下载连接MQTT服务器的相关库,点击项目——加载库——管理库,输入PubSubClient下载。

?这样就基本完成了IDE的配置。

然后在IDE环境中编写代码,烧录进8266中。

其中百度天工中创建的服务器地址

?要订阅和发布的主题

?服务器的用户名

?用户列表中8266端的用户名,点击连接测试为用户ID

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const char* STA_SSID = "8266连接WiFi名称";
const char* PSD = "WiFi密码";
const char *mqtt_server = "百度天工中创建的服务器地址";                                
const char *subTopic = "要订阅的主题"; 
const char *pubTopic = "要发布的主题";
const char *client_id = "用户列表中8266端的用户名"; 
const char *mqtt_username = "服务器的用户名";
const char *mqtt_password = "创建身份时记下用来连接MQTT的密码";

WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient); //定义MQTT客户端

void setup() {
  
  Serial.begin(9600);
  WiFi.begin(STA_SSID, PSD);                  // 启动网络连接
  Serial.print("Connecting to ");              // 串口监视器输出网络连接信息
  Serial.print(STA_SSID); Serial.println(" ...");  // 告知用户NodeMCU正在尝试WiFi连接
  
  int i = 0;                                   // 这一段程序语句用于检查WiFi是否连接成功
  while (WiFi.status() != WL_CONNECTED) {      // WiFi.status()函数的返回值是由NodeMCU的 
                                                  WiFi连接状态所决定的。 
    delay(1000);                               // 如果WiFi连接成功则返回值为WL_CONNECTED                       
    Serial.print(i++); Serial.print(' ');      // 此处通过While循环让NodeMCU每隔一秒钟检查一次WiFi.status()函数返回值
  }                                            // 同时NodeMCU将通过串口监视器输出连接时长读 
                                                  秒。
                                               // 这个读秒是通过变量i每隔一秒自加1来实现的。                                             
  Serial.println("");                          // WiFi连接成功后
  Serial.println("Connection established!");   // NodeMCU将通过串口监视器输出"连接成功"信 
                                                  息。
  Serial.print("IP address:    ");             // 同时还将输出NodeMCU的IP地址。这一功能是通 
                                                  过调用
  Serial.println(WiFi.localIP());              // WiFi.localIP()函数来实现的。该函数的返回值 
                                                  即NodeMCU的IP地址。


  mqttClient.setServer(mqtt_server, 1883); //设定MQTT服务器与使用的端口,1883是默认的MQTT端口
  mqttClient.setCallback(callback);        //设定回调方式,当ESP8266收到订阅消息时会调用此方法
  delay(1500);
}
//这里就开始进行MQTT的回调,就是当收到服务器传来的信息之后可以对ESP8266执行相应的动作,
void callback(char *topic, byte *payload, unsigned int length)
{
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  Serial.println();
  Serial.println(String(length));
  for (int i = 0; i < length; i++)
  {
Serial.print((char)payload[i]);
 }
  Serial.println();
}

void reconnect()            //为防止MQTT服务器下线,当断开服务时尝试重新连接/
{
  while (!mqttClient.connected())
  {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (mqttClient.connect(client_id, mqtt_username, mqtt_password))
    {
      Serial.println("connected");
                                                                       
      if (mqttClient.subscribe(subTopic, 1))
      {
        Serial.println("subscribe success");
      }
      else
      {
        Serial.println("subscribe fail");
      }
    }
    else
    {
      Serial.print("failed, rc=");
      Serial.print(mqttClient.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}

?进行烧录的时候,用串口线将8266接在电脑上,通过设备管理器——

端口查看COM端口号,设置Arduino中接入的为相应的端口。

然后进行烧录,烧录成功后按下8266上的复位按键,可以在串口检测器上看到WiFi连接成功和服务器连接成功。

?

?

四、微信小程序的搭建和代码

打开微信开发者工具,我这里使用的是测试号。自己修改项目名称,定义目录,其他不做修改点击确定。

接着下载连接MQTT服务器的第三方库,打开下面的链接,右键另存为一个mqtt文件,将次此文件复制放在你创建的小程序目录的utils中。

https://unpkg.com/mqtt@2.18.8/dist/mqtt.js

?我这里不涉及微信小程序界面的代码,请自行在网上寻找。

小程序连接服务器以后写吧...累人.....

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-20 15:17:19  更:2021-08-20 15:17:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:15:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码