ESP8266开发板+mysql数据库+DHT11

吕琪
2023-12-01

wemos D1 wifi ESP8266开发板连接mysql

wemos D1 wifi ESP8266开发板是一款基于esp8266的开发板,使用这个开发板可以很方便的连接wifi。同时这个开发板有很多IO口供我们使用。这个开发板的可以使用Arduino的IDE进行程序的编辑上传。具体的配置方法我就不说了,网上有很多教程。
目的:配置D1开发板连接mysql数据库,将DHT传感器读取到的数据存进mysql数据库。
准备库文件:配置开发板连接wifi用的库文件: esp8266WIFi
配置开发板连接Mysql需要的库文件:MySQL_Connector_Arduino
这些库文件可以在gitHab上找到,下面是网址:
https://github.com/adafruit/DHT-sensor-library
https://github.com/ChuckBell/MySQL_Connector_Arduino
https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WiFi
步骤:
1. 安装mysql数据,创建一个用户,一个table用来存储数据。

create database arduino_test;  // 创建一个数据库
create table test1(			//  创建一个测试表,用来存储开发板发来的信息
    tem double(3,1),
    hem double(3,1)
     );
  1. 配置mysql,运行用户进行远程连接。如果不进行配置开发板讲无法连接数据库。
    首先关闭mysql服务 net stop msyql // 具体的服务名要看你安装的时候设置的
    进入Dos界面,切换到mysql/bin目录下,就是你的Mysql安装目录默认安装的话一般都是:C:\Program Files\MySQL\MySQL Server 5.5\bin 或者进入这个目录下,按住Shift的同时点击鼠标右键。选择在此处打开Powershel窗口。
    输入mysqld --skip-grant-tables回车。
    再开一个DOS窗口,也切换到mysql\bin目录。
    在新开的窗口 输入mysql 回车,
    连接权限数据库:use mysql;
    更改密码 update MySQL.user set authentication_string=password(‘root’) where user=‘root’;
    最后刷新一下:flush privileges;
    关闭这两个窗口
    开启Mysql服务,在Dos窗口中输入 net start mysql
    如果还不行就去这个网址看一下,这个大神讲的很详细,https://www.cnblogs.com/lzyThingking/p/6501316.html

  2. 编写程序上传到板子里

#include <ESP8266WiFi.h>             // esp8266库
#include <MySQL_Connection.h>    // Arduino连接Mysql的库
#include <MySQL_Cursor.h>
#include <DHT.h>      // DHT库 
#define DHTPIN 4     // 定义DHT的引脚
#define DHTTYPE DHT11 // 定义dht类型

DHT dht(DHTPIN, DHTTYPE); // 初始化DHT11传感器

IPAddress server_addr(192,168,###,###);   // 安装Mysql的电脑的IP地址
char user[] = "root";              // Mysql的用户名
char password[] = "root";        // 登陆Mysql的密码

// Mysql中添加一条数据的命令
// arduino_test,test1:刚才创建的数据和表
char INSERT_SQL[] = "INSERT INTO  arduino_test.test1(tem,hem) VALUES ('%s','%s')";

char ssid[] = "360WiFi";         // WiFi名
char pass[] = "ss123456";     // WiFi密码

WiFiClient client;                 // 声明一个Mysql客户端,在lianjieMysql中使用
MySQL_Connection conn(&client);
MySQL_Cursor* cursor;		// 

// 读取传感器的数据并写入到数据库
void readAndRecordData(){
				  Serial.print(dht.readTemperature());      	// 在串口中打印读取到的温度
				  Serial.print(",\t"); 
                  Serial.println(dht.readHumidity());             // 在串口中打印读取到的湿度
                  char buff[128];                                         // 定义存储传感器数据的数组
                  char tem[5];			
                  char hem[4];				
                  // 将传感器采集的浮点数转换为3位整数一位小数的字串放入temp
                  dtostrf(dht.readHumidity(),3,1,tem);
                  dtostrf(dht.readTemperature(),2,1,hem);
                  sprintf(buff,INSERT_SQL,tem,hem);                 // 讲tem和hem中数据放入SQL中
                  MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);         // 创建一个Mysql实例
                  cur_mem->execute(buff);         // 将采集到的温湿度值插入数据库中
                  Serial.println("读取传感器数据,并写入数据库");
                  delete cur_mem;        // 删除mysql实例为下次采集作准备
}

void setup()
{
  Serial.begin(9600);
  while (!Serial);      //  等待端口的释放
  Serial.printf("\nConnecting to %s", ssid);
  WiFi.begin(ssid, pass);         // 连接WiFi
  while (WiFi.status() != WL_CONNECTED) {       // 如果WiFi没有连接,一直循环打印点
    delay(500);
    Serial.print(".");
  }

  Serial.println("\nConnected to network");
  Serial.print("My IP address is: ");
  Serial.println(WiFi.localIP());     // 打印开发板的IP地址

  Serial.print("Connecting to SQL...  ");
  if (conn.connect(server_addr, 3306, user, password))         // 连接数据库
    Serial.println("OK.");   
  else
    Serial.println("FAILED.");
  cursor = new MySQL_Cursor(&conn);    // 创建一个数据库游标实例
}

void loop()
{
  readAndRecordData();        
  delay(5000);
}
  1. 测试
    将代码上传到板子里,打开串口可以看到传感器数据。打开数据库可以看到传感器读取的数据

[参考]
MySQL Connector/Arduino Dr.Charles Bell January 2016 PDF

 类似资料: