ESP32-WROOM-32E最小开发板编程入门(Node-Red篇)

一、Node-RED环境搭建

1.1.概述

Node-RED是一款流程化物联网编程工具,它以低代码的方式,将硬件设备、应用接口和在线服务连接到一起。

Node-RED提供了一个基于浏览器的流程编辑器,不仅可非常方便地将面板上丰富的节点组装成流程,而且可以通过一键部署功能,将其安装到运行环境中。

1.2.Ubuntu安装

云端服务器环境为Ubuntu 22.04.4 LTS

1.2.1.安装Node.js

1.分别运行以下命令初始化环境

sudo apt update
sudo apt upgrade

2.分别运行以下命令安装 Node.js:

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs build-essential

3.运行以下命令查看Node.js安装结果:

#返回版本号v22.5.1
nodejs --version

1.2.2.安装Node-RED

运行命令安装Node-RED

sudo npm install -g --unsafe-perm node-red

image-20240721133212752

注意事项

由于网络的原因,安装结果可能会很漫长,如果失败就多运行几次这个安装命令。

返回上图结果表明安装成功

1.2.3.运行Node-RED

运行启动服务命令

node-red

服务启动后,我们打开浏览器,输入地址:http://IP:1880/ ,即可打开Node-RED开发界面

node-red-main

1.3.Windows安装

1.3.1.安装Node.js

从官网下载Node.js安装包,官网地址:https://nodejs.org/en/

我这里下载的版本是:node-v22.5.1-x64

运行安装包

image-20240721111306095

点击Next

image-20240721111342301

点击Next

image-20240721111410771

设置安装路径,点击Next

image-20240721111445446

点击Next

image-20240721111526929

点击Next

image-20240721111547711

点击Install,开始安装

image-20240721111602766

安装完成后,点击Finish完成安装。

image-20240721111648490

安装完成后,检查是否正常安装,进入cmd命令窗口,分别运行命令

#返回v22.5.1版本号
node --version
#返回10.8.2版本号
npm --version 

1.3.2.安装Node-RED

进入cmd命令行,运行命令

npm install -g --unsafe-perm node-red

image-20240721121053750

命令返回这样的结果说明安装成功。

1.3.3.运行Node-RED

启动Node-RED,进入命令行,运行命令启动服务

node-red

服务启动后,我们打开浏览器,输入地址:http://127.0.0.1:1880/ ,即可打开Node-RED开发界面

image-20240721114847849

二、数据面板dashboard实现

数据面板可以直观的显示上传至MQTT服务器的各项数据,实现于物联网设备的交互,Node-Red可以轻松的低代码编程实现。

这里围绕我们的ESP32-WROOM-32最小开发板和酒精气体传感器数据面板开发过程直观的表现出来,篇幅有限,Node-Red基础知识不在具体说明,基本操作以短视频的形式体现。

2.1.安装node-red-dashboard

2.1.Node-Red安装node-red-dashboard

2.2.创建导航栏及面板

这里我们搭建一个基础的操作界面,用于实现最基本的页面展示,实现效果如下图显示

image-20241012122948689

2.2.Node-Red创建导航栏及面板

2.3.美化界面样式CSS

2.2.章节做的页面是最初的基本画面,我们可以使用css来简单美化一下样式,css代码只是简单的添加了

<style>
    /*编辑分组样式*/
    ui-card-panel {
        box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;
        border-radius: 5px;
    }

    /*编辑组件样式*/
    ui-card-panel * {
        border-radius: 5px;
    }

    /*编辑分组标题样式*/
    .nr-dashboard-cardtitle {
        font-weight: bold !important;
    }
</style>

这个样式比较简单,只是添加了圆角和修饰了字体,随后我们调整一下面板的宽度和高度,实现效果如下图显示

image-20241012132142300

2.3.Node-Red美化界面样式CSS

2.3.按钮控制开发板LED开与关

本节我们实现在数据面板中使用按钮来控制开发板LED灯的开和关,为了使界面美观,这里我们放置一下LED灯模型图,通过改变模型图的颜色来直观的观看到开关灯的效果,这也需要一个第三方的插件node-red-contrib-ui-led

本节我们分两部分来实现,第一部分我们需要布局一下页面元素,放置一个switch按钮和led灯模型图,并设置它们的布局,第二部需要放置一个mqtt out元素,用于向MQTT服务器发送指令以达到远程控制的目的

2.3.1.布局画面

2.3.1.按钮控制LED灯页面布局

2.3.2.远程控制LED灯

本节我们实现数据面板上的开关与开发板LED的交互,同时改变数据面板上模拟灯的状态转换,在开发板的物联网篇文章中已经讲明了如何通过MQTTX客户端工具通过发送0和1来进行互动,这里我们操作数据面板上的switch按钮来实现。

由于是向MQTT服务器的“hantu_iot/testtopic"这个主题发送消息,这里我们需要在Node-Red中使用节点mqtt out;

2.3.2.远程控制LED灯

2.4.获取Wi-Fi网络基本信息

我们之前的MQ-3B传感器程序中,通过WiFi这个函数获取我们开发板连接WiFi网络的基本信息,然后发布到MQTT服务器

  // 连接WiFi网络并获取WiFi基本信息
  WiFi.begin(ssid, password);
  Serial.print("正在连接WIFI");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println(".");
  }
  Serial.println("连接成功");
  Serial.print("IP Address");
  Serial.println(WiFi.localIP());

  Serial.print("MAC Address");
  Serial.println(WiFi.macAddress());

  Serial.print("SSID");
  Serial.println(WiFi.SSID());

  Serial.print("RSSI");
  Serial.println(WiFi.RSSI());

  Serial.print("Status");
  Serial.println(WiFi.status());

WiFi.status()的返回值
status函数可以在无线终端模式下,获取当前的模块网络连接状态。

  • 返回0 = WL_IDLE_STATUS – 返回值为0说明正在尝试连接

  • 返回1 = WL_NO_SSID_AVAIL – 返回值为1说明没有找到设定的SSID的网络

  • 返回2 = WL_SCAN_COMPLETED – 返回值为2说明网络扫描完毕

  • 返回3 = WL_CONNECTED – 返回值为3说明连接成功成功

  • 返回4 = WL_CONNECT_FAILED – 返回值为4说明连接失败

  • 返回5 = WL_CONNECTION_LOST – 返回值为5说明连接丢失

  • 返回6 = WL_DISCONNECTED – 返回值为6说明未连接

我们这里将获取到的wifi基础信息显示到数据面板中,需要特别处理的是这个status状态,根据判断返回的数值来显示当前的Wifi状态,我们在Node-Red中使用function这个节点来编程实现,代码如下

var payload = msg.payload.Status;
if(payload == 3){
    msg.payload = "已连接";
}else if(payload == 0){
    msg.payload = "正在尝试连接网络";
}else if(payload == 1){
    msg.payload = "没有找到设定的SSID网络";
}else if(payload == 2){
    msg.payload = "网络扫描完毕";
}else if(payload == 4){
    msg.payload = "连接失败";
}else if(payload == 5){
    msg.payload = "连接丢失";
}else if(payload == 6){
    msg.payload = "没有连接";
}
return msg;

注意事项:

这里只是说明一下Node-Red中function这个元素的简单编程方法,实际应用中数据面板只会显示status=3的情况,因为其它情况下开发板相当于断网,是不会向MQTT服务器发送数据的。

在我们的开发板程序中,会定时向MQTT服务器的hantu_iot/testtopic这个主题发送这样的json数据

{"LED":0,"SSID":"HANXIN","IP":"192.168.0.103","MAC":"10:06:1C:E9:01:F8","RSSI":-45,"Status":3,"MQ3B":6.372039795}

我们在Node-Red中也订阅这个主题,它也会接收到这个数据,处理服务器发回的信息,我们在Node-Red中使用mqtt in这个元素,实现效果如下图所示
image-20241018104948323

2.4.获取Wi-Fi网络基本信息

2.5.图表显示酒精传感器数据

我们之前的MQ-3B传感器程序中,已经将MQ-3B传感器的数据发布到MQTT服务器,我们在Node-Red中利用图表形式来直观的展现出来,因为是处理服务器发回的信息,我们在Node-Red中依然使用mqtt in这个元素,实现效果如下图所示
image-20241018141128938

2.5.图表显示酒精气体传感器MQ-3B数据

注意事项:
1.视频中设置两个按钮节点图标,图标的库源自fontawesome,官网地址:https://fontawesome.com/
2.刷新数据的按钮只是为了布局美观放置到这里,后期我们跟数据库交互时才会用到它。

三、Node-RED操作MySql数据库

3.1.Ubuntu下安装MySql数据库

云端服务器环境为Ubuntu 22.04.4 LTS,在此环境下安装MySql数据库

使用APT命令来进行安装,

1.运行命令进行软件包更新

sudo apt-get update

2.运行命令进行MySql安装

sudo apt-get install mysql-server

3.运行命令启动MySql服务

sudo systemctl start mysql

4.运行命令检查MySql状态

sudo systemctl status msyql

返回数据如下说明MySql正常启动

image-20241019114628370

5.设置密码和权限

安装过程中没有设置密码和权限,这会带来安全上的隐患,我们需要对其进行设置

#登录mysql,默认密码为空,无需输入直接回车进入mysql命令行
mysql -u root -p
#设置密码
alter user 'root'@'localhost' identified with mysql_native_password by '密码’;
#刷新命令
flush privileges;
#退出mysql命令行
quit;
#重启mysql
sudo systemctl restart mysql;

6.配置root账号远程连接

#登录mysql
mysql -u root -p
#打开mysql数据库
use mysql;
#查询user数据表
select user,host from user;

返回值

image-20241019122845334

可以看到root用户默认不允许进行远程登录

update user set host='%' where user='root' and host='localhost';

7.设置远程连接

#修改mysql配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

打开配置文件,并将只允许本地访问的语句注释掉

image-20241019124332224

#重启mysql
sudo systemctl restart mysql;

到此MySql在Ubuntu环境下安装配置完成,此时我们就可以使用远程管理工具登录云端mysql进行数据库的相关操作,我这里使用的是Navicat for MySql 工具,如下图所示已经正常连接到网络数据库。

image-20241019130640375

3.2.Node-Red实现数据库表增删改查操作

在对mysql数据库进行操作前,我们需要先新建一个数据库IoT,然后在IoT数据库下新建表sensor_values,使用客户端工具Navicat fro MySql来创建,这个创建过程较为简单,这里就不在详细说明。

3.2.1.Node-RED安装mysql及相关节点

我们需要在Node-Red中安装第三方节点来对mysql数据库进行增删改查操作,需要安装node-red-node-mysql和node-red-node-ui-table这两个节点

3.2.1.Node-RED安装mysql及相关节点

3.2.2. 查询表数据Select

3.2.2. 查询表数据Select

3.2.3.插入表数据Insert

3.2.3.插入表数据Insert

3.2.4.更新表数据Update

3.2.4.更新表数据Update

3.2.5.删除表数据Delete

3.2.5.删除表数据Delete

3.3.图表显示数据库表数据

3.3.图表显示数据库表数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值