ESP8266采集多个传感器数据通过WIFI上传到本地数据库(风速、风向、CO、颗粒物)
文章目录
- 1.数据库使用简介
- 1.Navicat premium连接
- 2.新建数据库
- 3.在数据库中新建表
- 2.代码实现
- 代码
1.数据库使用简介
建立数据库连接,在连接里新建数据库,在数据库里新建表
1.Navicat premium连接
安装完数据库后,用Navicat premium软件进行连接,这个也需要安装,这个相当于数据库的可视化软件,安装过程随便找找就有,接下来建立连接
这里连接名随便起,记住就行,主机写IP地址,可以通过命令查询,window+R→cmd→ipconfig
不确定的可以将这俩都试试,端口默认,用户名你没改的话就是root,密码就是你的数据库密码了,然后点击连接测试,出现连接成功就可以了,点击确定,连接,有些人可能会报错,采用navicat软件连接的话相当于远程连接,所以需要更改数据库的用户权限,搜一搜就可以解决了,反正最终的结果就是连接成功的界面,其它的报错信息直接复制搜索就可以找到解决办法了。
2.新建数据库
在新建的连接下新建数据库
这是我已经建好的数据库,数据库名data,随便起,下面俩参数就按照我这就行。
3.在数据库中新建表
数据库建立完成后,需要新建表来接收数据,相当于建一个EXCEL表
这里我设置了7列数据,nowtime是用来加时间戳的,其他的都是我所需要的传感器数据,名称、类型(数据类型)、长度、小数点根据需要设置就可以了,值得说明的是,如果你选择了float类型,小数点那里不可以为0,不然数据可能写不进来。
2.代码实现
实现风速、风向、颗粒物、CO四种传感器的采集,注释详细
连接数据库用到MySQL_Connection库,这里首先到arduino ide的工具那里下载一个库,直接搜索MYSQL安装即可
代码
#include <ESP8266WiFi.h> // esp8266库
#include <MySQL_Connection.h> // Arduino连接Mysql的库
#include <MySQL_Cursor.h>#include "SoftwareSerial.h"
SoftwareSerial uart1(13,15);//RX=d7,TX=d8,用于颗粒物传感器
SoftwareSerial uart2(14,12);//RX=d5,TX=6,用于CO传感器
SoftwareSerial uart3(0,2);//RX=d3,TX=d4,用于风向传感器
SoftwareSerial uart4(5,4);//RX=d1,TX=d2, 用于风速传感器unsigned char item[9] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00,0X00, 0x79}; //16进制颗粒物问询命令,CO也一样,共用
unsigned char item1[8] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x02,0xC4, 0x0B}; //16进制风向传感器问询命令,风速一样IPAddress server_addr(192,168,42,93); // 安装Mysql的电脑的IP地址,和连接里的一样
char user[] = "root"; // Mysql的用户名
char password[] = "******"; // 登陆Mysql的密码// Mysql中添加一条数据的命令
char INSERT_SQL[] = "INSERT INTO data.data(PM1,PM2,PM10,CO,Direction,Speed,nowtime) VALUES ('%d','%d','%d','%.1f','%d','%.1f',now())";//第一个data是数据库名,第二个data是表名,后面七个对应表的7列名称,再后面就是每列对应数据类型了
char ssid[] = "realme X7 Pro"; // WiFi名
char pass[] = "12345678"; // WiFi密码
WiFiClient client; // 声明一个Mysql客户端,在连接Mysql中使用
MySQL_Connection conn(&client);
MySQL_Cursor* cursor; //
int isConnection=0;//用来判断数据库是否连接成功// 读取数据并写入到数据库
void readAndRecordData(){char buff[128];// 定义存储数据的数组int arr[6];//定义一个数组用于接收传感器返回的三种颗粒物的值和CO、风速、风向值ProcessSerialData(arr);//读取颗粒物CO传感器函数中传入这个数组,用这个数组来接收,如果不用数组接收的话,涉及到局部变量的问题,采集的数据在另一个函数调不出来,所以传入一个数组接收,之后直接调用数据即可//经过上面采集数据函数处理后,所需要的七个传感器数据都已存在arr[6]里面int pm1=arr[0];//定义类型数据来接收数组里的数据,需要进行类型转换的也可以int pm2=arr[1];int pm10=arr[2];int direct=arr[4];float co =float(arr[3])*0.1;//转为float型,在对应数据库要设置小数点位数float sp =float(arr[5])*0.1;//转为float型,在对应数据库要设置小数点位数sprintf(buff,INSERT_SQL,pm1,pm2,pm10,co,direct,sp); //insert_SQL上面定义了列的数据类型接收,写入数据库表里面MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn); // 创建一个Mysql实例cur_mem->execute(buff); Serial.println("读取数据,并写入数据库");delete cur_mem; // 删除mysql实例为下次采集作准备
}void setup()
{Serial.begin(115200); //串口波特率uart1.begin(9600); //定义的传感器采用的软串口的波特率,与传感器特性相同uart2.begin(9600); //定义的传感器采用的软串口的波特率,与传感器特性相同uart3.begin(4800); //定义的传感器采用的软串口的波特率,与传感器特性相同uart4.begin(4800); //定义的传感器采用的软串口的波特率,与传感器特性相同while (!Serial); // 等待端口的释放Serial.printf("\nConnecting to %s", ssid);WiFi.begin(ssid, pass); // 开始连接WiFiwhile (WiFi.status() != WL_CONNECTED) { // 如果WiFi没有连接,一直循环打印点delay(500);Serial.print(".");}Serial.println("\nConnected to network");Serial.print("Connecting to SQL... ");if (conn.connect(server_addr, 3306, user, password)) // 连接数据库{isConnection=1;Serial.println("成功连接数据库---OK."); }else{isConnection=0;Serial.println("连接数据库失败---FAILED.");}cursor = new MySQL_Cursor(&conn); // 创建一个数据库游标实例
}void loop()
{if(isConnection==1)//判断数据库是否连接成功{readAndRecordData(); delay(10000);//读取数据时间间隔}}
//读取颗粒物传感器函数,采用问询模式
void ProcessSerialData(int* arr)//传入数组接收三种颗粒物
{uint8_t mPkt[9] = {0};//定义颗粒物数组返回字节接收数组uint8_t coPkt[9] = {0};//定义CO数组返回字节接收数组uint8_t dPkt[9] = {0};//定义风向数组返回字节接收数组uint8_t sPkt[9] = {0};//定义风速数组返回字节接收数组for (int i = 0 ; i < 9; i++) // 发送测温命令{ uart1.write(item[i]); // write输出,写入颗粒物传感器问询指令uart2.write(item[i]); // write输出,写入CO传感器问询指令}for (int m = 0 ; m < 8; m++) // 发送测温命令{ uart3.write(item1[m]); // write输出,写入风向传感器问询指令uart4.write(item1[m]); // write输出,写入风速传感器问询指令 }delay(100); // 等待数据返回
while (uart1.available()) //判断对于串口是否返回了数据{for(int j=0;j<9;j++){mPkt[j]=uart1.read(); // read按字节读取,存入数组}if(uart2.available()>0){for(int k=0;k<9;k++){coPkt[k]=uart2.read(); // read按字节读取,存入数组}}if(uart3.available()>0){for(int n=0;n<9;n++){dPkt[n]=uart3.read(); // read按字节读取,存入数组}} if(uart4.available()>0){for(int a=0;a<9;a++){sPkt[a]=uart4.read(); // read按字节读取,存入数组}} } arr[0]=mPkt[6]*256+mPkt[7];//PM1.0arr[1]=mPkt[2]*256+mPkt[3];//PM2.5arr[2]= mPkt[4]*256+mPkt[5]; //PM10arr[3]=coPkt[2]*256+coPkt[3];//COarr[4]=dPkt[3]*256+dPkt[4];//wind direction,八向,第五第六两位为360°arr[5]=sPkt[3]*256+sPkt[4];//wind speedSerial.println(dPkt[4]);
}
下面就是我所实现的传感器数据采集上传到数据库,板子与电脑需要在同一个局域网
ESP8266采集多个传感器数据通过WIFI上传到本地数据库(风速、风向、CO、颗粒物)相关推荐
- Arduio ESP8266将DHT11温湿度传感器数据在网页上显示
Arduio ESP8266将DHT11温湿度传感器数据在网页上显示
- ROS节点获取TIA_go机器人传感器数据,并上传到指定服务器做深度学习处理
Brief 正如标题所言,该小项目包括三部分,如下 ROS节点获取机器人数据 socket和服务器数据传输,包括了数据上传和获取 服务器深度学习处理数据 1 ROS节点获取机器人数据 1.1 数据结构 ...
- 使用Python采集京东商品详情数据,并上传到拼多多商城中
采集场景 打开京东商品详情页(实例网址:https://item.jd.com/100016944073.html ),采集点击不同的参数(颜色.版本等)后得到的数据(商品编号.价格.主图链接等字段会 ...
- 解析微波辐射计数据,并上传到mysql数据库(pandas应用及mysql操作)
创建mysql数据库,从微波辐射计数据文件_lv2中提取,廓线数据,积分数据,云底高度及雨状态,并上传数据到数据库, lv2文件格式说明 csv文件件,逗豆分隔,前20行为数据说明,数据从22行开始, ...
- ESP8266 读取多个传感器数据(风速、风向、颗粒物、CO)
文章目录 1.ESP8266开发板资源 2.Arduino编程 1.准备工作 2.读取多个串口数据 1.定义软串口 2.涉及传感器简介 3.集成代码(注释详细) 4.Arduino 串口监视器 1.E ...
- 使用STM32F103采集Si7021温湿度传感器数据
使用STM32F103采集Si7021温湿度传感器数据 2019.06.13 更新 最近弄了个GitHub仓库,想要下载源码但又不想弄积分的朋友可以直接到我的GitHub上克隆 https://git ...
- 用Mixly ESP8266 ESP32本地局域网/在线OTA无线wifi上传方法
Arduino ESP32 ESP8266 远程无线上传 下载 Mixly 齐护机器人 局域网OTA ESP8266 ESP32本地局域网及在线OTA无线wifi上传方法 方法1:在线升级方法 1-1 ...
- stm32心率监测系统(心率监测,wifi上传,APP显示,上位机显示)
一.硬件材料清单: 1.STM32核心板 2.OLED显示屏 3.心率传感器 4.ESP8266 二.实现的功能 1:STM32采集心率传感器数据 2:OLED实时显示心率数据和心率曲线 3:wifi ...
- 水质监测,stm32水质监测,tds检测,水温检测,ph检测,wifi上传,远程控制
水质监测,stm32水质监测,tds检测,水温检测,ph检测,wifi上传,远程控制 基于stm32 水质检测 tds检测 水温检测 ph检测 OLED显示 c#上位机数据显示存储 一.硬件材料清单: ...
最新文章
- Vue.js 源码目录设计(二)
- Android项目中使用激光推送时在模拟器上运行时报Fatal signal 11的解决
- 私聊模式的设计与实现
- mysql dba系统学习(16)mysql的mysqldump备份
- 基于@RabbitListener声明LazyQueue
- esper_Twitter4j和Esper:在Twitter上跟踪用户情绪
- Spring-framework应用程序启动loadtime源码分析笔记(二)——@Transactional
- 基于海思开发板的屏幕截图程序(二)
- jq ajax提交评论,织梦评论怎么改成自己的jq ajax评论
- 结合Composer 新版本PHP的开发方式
- python操作注册表能干啥_转 python操作注册表模块_winreg
- HDU 3339 In Action(最短路+背包)题解
- 大巧不工 JGraph简介和使用技巧(转)
- 一棵叫默克尔的神奇之树
- 两个字母组成的拼音,域名注册备用
- mysql关于case when的用法举例
- 供给云AI群助手解析社群私域运营核心方法论
- 【云栖大会】基因行业陷入“怪圈”,数据存储成本竟然超过检测成本
- 计算二叉树的第k层中所有叶子结点个数
- [一天一项目]120+项目构思