Arduino+ESP826601+DHT11连接mysql数据库并实现数据的插入

一、前言

在做毕业设计的过程中,经过查资料发现可以使用Arduino+ESP826601S模块直接连接MySQL数据库并插入数据,下面我将使用Arduino+ESP826601+DHT11实现连接MySQL数据库并插入温湿度数据。

二、准备工作

硬件

  • Arduino Uno R3开发板
  • ESP826601 Wi-Fi模块(或ESP826601S)
  • DHT11温湿度传感器
  • 杜邦线若干+面包板

软件

在Arduino IDE中需要用到的库(需要自行下载)

  • MySQL Connector
  • DHT sensor library

电路图:
Arduino连接MySQL数据库

三、程序代码

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数据库并插入数据的介绍就说到这里,如果有遇到问题可以评论区说出来,我看到了尽量回复,我是“风行男孩”,朋友们,有缘再见!。

  • 31
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值