ESP8266 Node Mcu开发板连接WIFI并上报数据到MQTT服务器——物联网应用开发

一、前言

        本文主要介绍关于ESP8266 Node Mcu开发板如何连接WIFI并将本地采集的数据上传到MQTT服务器中。

        大家调试可以使用MQTTBox

二、WIFI连接

        首先,导入WIFI连接所需的头文件,引入所需库。

#include <ESP8266WiFi.h>

        声明字符串常量,以存储用于连接的WIFI名和密码。

//这里更改WIFI名称
const char* wifi_name= "TP-LINK_AA01";
//这里填写WIFI密码
const char* password = "00000000";

        初始化WIFI模块并等待连接成功。注意:ESP8266开发板本身有WIFI模块的开发库,而不需AT指令控制WIFI模块。

  WiFi.begin(wifi_name, password);while (WiFi.status() != WL_CONNECTED) {delay(500);}

        如果你有设置静态IP、网关等的需求,可以通过下面的代码来完成。

        首先,声明相关参数的字符串常量:

IPAddress ip(0.0.0.0);
IPAddress mask(255,255,255,0);
IPAddress gateway(0.0.0.0);

        随后执行下面代码绑定配置。

  WiFi.config(staticIP,Mask,Gateway);

三、连接MQTT服务器

        首先,导入连接MQTT服务器的头文件,引入所需库。

WiFiClient espClient;
PubSubClient client(espClient);

        随后,声明需要上传的MQTT报文主题的字符串常量。

//设置你的主题
const char* Topic = "my_topic";

        声明并初始化客户端对象。

WiFiClient wifi;
PubSubClient client(wifi);

        声明有关MQTT服务器的字符串常量。

const char* mqttServer = "broker.cn";
const int mqttPort = 1883;
const char* mqttUser = "admin";
const char* mqttPassword = "admin";
const char* clientID="abc001";

        设置MQTT服务器信息并设置消息接收回调函数。

client.setServer(mqttServer, mqttPort);
client.setCallback(callback);

        其中,我们必须声明并自定义callback函数。

void callback(char* topic, byte* payload, unsigned int length) {Serial.println("Receive Message");
}

        连接MQTT服务器,并订阅报文。

client.connect(clientID, mqttUser, mqttPassword);
client.subscribe(Topic);

        声明字符数组,并上报数据,其中Message的内容需要根据实际数据格式化并赋值。

char message[200];
client.publish(Topic, message);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/107412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue项目路由加前缀

Vue项目路由加前缀 vue-cli3.0配置 1&#xff09;静态资源前缀 vue.config.js /module.exports 配置 publicPath&#xff1a;“/前缀” 2&#xff09;路由前缀 route/index.js export default new Router({ base:”/前缀" , }) 参考文章&#xff1a;https://blog.csd…

Python学习基础笔记七十三——调试程序

为什么要调试&#xff1f; 我们发现程序运行的结果和我们预期的不符。 程序运行的错误&#xff0c;我们通常叫做bug。 有两种类型的bug&#xff1a;语句错误和逻辑错误。 所谓语句错误&#xff0c;就是执行代码的时候&#xff0c;解释器就可以直接发现的代码错误&#xff0c…

【00】神经网络之初始化参数

问题描述 #随机初始化权重 w12 np.random.randn(100, 784)/np.sqrt(784) 为什么除以28 回答 这里的代码是初始化一个深度学习模型中的权重矩阵w12。权重矩阵的形状是(100, 784)&#xff0c;这是一个从784个输入节点到100个隐藏节点的全连接层。 除以np.sqrt(784)是权重初始…

Qt QMovie和QLabel配合播放GIF表情包

文章目录 效果演示main函数创建MoviePlayer对象头文件movieplayer.h源文件movieplayer.cpp代码解释在Qt框架中,QMovie是用于处理动画和视频的类。所有源码已在本篇文章公布。 效果演示 main函数创建MoviePlayer对象 #include <QApplication>#include "movie

git pull and git fetch 到底有什么区别?

大家好这里是tony4geek 。 今天给大家介绍git pull and git fetch 有什么区别&#xff1f; 开发过程中大家肯定很多人都用到过git。获取代码有很多的git命令&#xff0c;最长用的命令是pull和fetch。那么问题来了他们之间到底有什么区别&#xff0c;该怎么使用呢&#xff1f;…

scratch身高统计 2023年9月中国电子学会图形化编程 少儿编程 scratch编程等级考试三级真题和答案解析

目录 scratch身高统计 一、题目要求 1、准备工作 2、功能实现 二、案例分析

es6中proxy如何使用

ES6中的Proxy是一个强大的对象拦截器&#xff0c;它可以拦截对象的各种操作&#xff0c;比如属性访问、函数调用等。你可以使用Proxy来控制对象的访问和修改行为&#xff0c;从而实现一些高级特性。下面是使用Proxy的一些例子&#xff1a; 属性访问拦截 const obj {name: To…

docker容器内安装项目运行环境(python依赖包+allure)

目录 一、安装自动化项目依赖包1.导出项目依赖库2.上传到远程仓库3.进入jenkins容器内&#xff0c;检查是否安装git4.配置git用户信息5.生成秘钥6.把代码拉取下来7.安装python项目依赖8.运行项目 二、安装allure1.jenkins容器内安装allure&#xff0c;进入/usr/local/2.下载all…

获取远程仓库的信息和远程分支的信息

前记&#xff1a; git svn sourcetree gitee github gitlab gitblit gitbucket gitolite gogs 版本控制 | 仓库管理 ---- 系列工程笔记. Platform&#xff1a;Windows 10 Git version&#xff1a;git version 2.32.0.windows.1 Function&#xff1a;获取远程仓库的信息和远…

vue axios封装并发请求

场景&#xff1a;有时候进入某些页面时会同时请求很多个业务接口&#xff0c; 如果一个一个的发送请求&#xff0c;会产生很多冗余&#xff0c;所以封装了一个方法&#xff08;参考渡一教育袁老师课程&#xff09;。 此方法会根据请求顺序&#xff0c;返回一个返回结果数组&am…

MyBatisPlus的学习项目页面

MyBatisPlus通过扫描实体类&#xff0c;并基于反射获取实体类信息作为数据库表信息 类名驼峰转下划线作为表名 名为id的字段作为主键 变量名驼峰转下划线作为表的字段名 常见注解 TableName&#xff1a;用来指定表名 Tableld&#xff1a;用来指定表中的主键字段信息 Tabl…

修改http_charfinder.py使能在python311环境中运行

需要修改两个函数&#xff0c;第一个是init函数&#xff0c;修改如下&#xff1a; async def init(loop, address, port): # <1> # app web.Application(looploop) # <2> # app.router.add_route(GET, /, home) # <3> app web.Application(…

qt listwidget获取当前选中项

要获取Qt ListWidget中当前选中的项&#xff0c;你可以使用currentItem()函数。这个函数会返回一个QListWidgetItem对象&#xff0c;表示当前选中的项。以下是一个示例代码&#xff1a; QListWidgetItem *selectedItem listWidget->currentItem(); if (selectedItem) {// …

kong网关从入门到放弃

Kong网关是一个轻量级、快速、灵活的云名称API网关。Kong Gateway位于您的服务应用程序前面&#xff0c;可动态控制、分析和路由请求和响应。KongGateway通过使用灵活、低代码、基于插件的方法来实现您的API流量策略。 https://docs.konghq.com/gateway/latest/#features 架构…

微前端一:技术选型

微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略。 微前端架构具备以下几个核心价值&#xff1a; 1、技术栈无关 主框架不限制接入应用的技术栈&#xff0c;微应用具备完全自主权 2、独立开发、独立部署 微应用仓库独立&#xff0…

面试题-React(十二):React中不可变数据的力量

一、不可变数据的概念 不可变数据意味着数据一旦创建&#xff0c;就不能被更改。在React中&#xff0c;每次对数据的修改都会返回一个新的数据副本&#xff0c;而不会改变原始数据。这种方式确保了数据的稳定性和一致性。 二、Props中的不可变数据 在React中&#xff0c;组件…

TikTok国际版 使用特网科技Bluestacks模拟器安装方法

特网科技Bluestacks模拟器主机 桌面自带Bluestacks模拟器 TikTok国际版Bluestacks模拟器搜索tiktot 登录google应用商店-安装TikTok 安装过程可能需要3-5分钟不等-配置过低可能会导致安装失败&#xff0c;建议升级更高内存。 安装完成-打开 安装成功APP-我的游戏查看 打开国际版…

【Docker 内核详解】namespace 资源隔离(二):UTS namespace IPC namespace

【Docker 内核详解 - namespace 资源隔离】系列包含&#xff1a; namespace 资源隔离&#xff08;一&#xff09;&#xff1a;进行 namespace API 操作的 4 种方式namespace 资源隔离&#xff08;二&#xff09;&#xff1a;UTS namespace & IPC namespacenamespace 资源隔…

风电厂VR情景式三维模拟实训系统让教育更加贴近实际

VR虚拟仿真实训室是一种利用虚拟现实技术和仿真技术&#xff0c;为教学和学生实训提供虚拟环境和实践机会的设施。它通过将学生置身于虚拟场景中&#xff0c;让他们可以身临其境地参与到实际场景中&#xff0c;从而提高实际操作能力和技能水平。 在教学方面&#xff0c;VR虚拟仿…

rust: function

///file: nestd.rs ///ide: RustRover 233.8264.22 /// /// /// /***自定义函数*/ pub fn function() {println!("called my::nested::function()"); }#[allow(dead_code)] fn private_function() {println!("called my::nested::private_function()"); }/…