Arduino+ESP826601+DHT11连接mysql数据库并实现数据的插入
在做毕业设计的过程中,经过查资料发现可以使用Arduino+ESP826601S模块直接连接MySQL数据库并插入数据,下面我将使用Arduino+ESP826601+DHT11实现连接MySQL数据库并插入温湿度数据。
·
Arduino+ESP826601+DHT11连接并使用MySQL数据
- 一、前言
- 二、准备工作
- 三、程序代码
- 1. Arduino的程序
- 2. ESP826601的程序
- 3. 上面程序需要注意的地方
- 四、运行结果
- 五、结束语
一、前言
在做毕业设计的过程中,经过查资料发现可以使用Arduino+ESP826601S模块直接连接MySQL数据库并插入数据,下面我将使用Arduino+ESP826601+DHT11实现连接MySQL数据库并插入温湿度数据。
二、准备工作
硬件:
- Arduino Uno R3开发板
- ESP826601 Wi-Fi模块(或ESP826601S)
- DHT11温湿度传感器
- 杜邦线若干+面包板
软件:
- Arduino IDE(没安装可以点击进入我的另一篇博客有详细教程)
- ESP8266开发环境(我的另一篇博客有安装教程)
- 本地MySQL服务
在Arduino IDE中需要用到的库(需要自行下载):
- MySQL Connector
- DHT sensor library
电路图:
三、程序代码
1. Arduino的程序
#include <SoftwareSerial.h>
#include <DHT.h>
#include <DHT_U.h>
#define pin_ht 7 //温湿度传感器数据引脚
SoftwareSerial mySerial(3, 2); //RX, TX(软串口)
DHT dht(pin_ht, DHT11); //设定温湿度传感器类型及数据引脚
float temp = 0; //温湿度
float hum = 0;
unsigned long previousMillis = 0; // 上一次发送数据的时间
const long interval = 5000; // 发送数据的间隔时间,单位:毫秒
void setup() {
Serial.begin(9600); //初始化串口
mySerial.begin(9600);
while(!Serial); //确保串口正常启动后才允许
while(!mySerial);
pinMode(pin_ht, INPUT);
dht.begin(); //DHT工作
}
String floatToString(float num){
return String(num, 1);
}
void loop() {
if(mySerial.available()){ //输出软串口信息
String data = mySerial.readStringUntil('\n');
Serial.println(data);
}
unsigned long currentMillis = millis(); //获取当前时间
if(currentMillis - previousMillis >= interval){ //每隔interval秒发送一次数据
previousMillis = currentMillis;
temp = dht.readTemperature();
hum = dht.readHumidity();
String t = floatToString(temp);
String h = floatToString(hum);
String data = String("t:") + temp + "," + "h:" + h; //也可使用其他方法拼接
char dataArray[30];
data.toCharArray(dataArray, 32);
mySerial.write(dataArray); //发送给ESP826601
}
}
2. ESP826601的程序
#include <ESP8266WiFi.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
char ssid[] = "your wifi name"; // WiFi名
char pswd[] = "you wifi password"; // WiFi密码
char user[] = "root"; // MySQL的用户名
char password[] = "123456"; // 登录MySQL的密码
IPAddress server_addr(192, 168, 10, 31); // MySQL服务器地址
WiFiClient client;
MySQL_Connection conn(&client);
MySQL_Cursor* cursor;
bool isConnection = false;
char SQL[] = "insert into wang.test(temp, hum) values (%s, %s)"; // sql数据插入语句
// 读取传感器的数据并写入到数据库
void readAndRecordData() {
if(Serial.available()){
String data = Serial.readStringUntil('\n'); //读取一行数据
// 找到温度和湿度的起始位置
int tempIndex = data.indexOf("t") + 2;
int humIndex = data.indexOf("h") + 2;
// 找到温度和湿度的结束位置
int tempEndIndex = data.indexOf(",", tempIndex);
int humEndIdex = data.indexOf(",", humIndex);
//提取湿度和湿度值
String tempStr = data.substring(tempIndex, tempEndIndex);
String humStr = data.substring(humIndex, humEndIdex);
char buff[64];
sprintf(buff, SQL, tempStr, humStr);
MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn); //获取游标
bool flag = cur_mem->execute(buff); //执行SQL插入语句
delete cur_mem;
if(flag){
Serial.println("数据插入成功!");
}else{
Serial.println("数据插入失败!");
}
}
}
void setup() {
Serial.begin(9600);
Serial.printf("\nConnecting to %s", ssid);
WiFi.begin(ssid, pswd); //连接wifi
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("wifi连接成功");
Serial.print("My IP address is: ");
Serial.println(WiFi.localIP());
Serial.print("Connecting to SQL... ");
if (conn.connect(server_addr, 3306, user, password)) { //连接数据库
isConnection = true;
Serial.println("成功连接数据库---OK.");
} else {
Serial.println("连接数据库失败---FAILED.");
}
cursor = new MySQL_Cursor(&conn);
}
void loop() {
readAndRecordData();
}
3. 上面程序需要注意的地方
两个程序代码中,Arduino端的可以直接使用我的代码,但是ESP826601端的代码有些地方需要按自己的实际情况修改,主要是下面这段代码,还有要注意的是,你自己要创建好对应的数据库和表。
四、运行结果
在接通电源后,打开串口监视器,可以看到串口中打印下面的字符,可看到Wi-Fi以及MySQL的连接情况,以及在初始化完成后,数据已经成功插入到数据库中。
Arduino IDE串口打印:
数据库数据查询:
五、结束语
好啦,关于使用Arduino+ESP826601+DHT11模块连接MySQL数据库并插入数据的介绍就说到这里,如果有遇到问题可以评论区说出来,我看到了尽量回复,我是“风行男孩”,朋友们,有缘再见!。(码字不易,转载请标明出处,谢谢合作(🙏))
更多推荐
已为社区贡献1条内容
所有评论(0)