ESP8266开发板+mysql数据库+DHT11

653 阅读4分钟

wemos D1 wifi ESP8266开发板连接mysql

wemos D1 wifi ESP8266开发板是一款基于esp8266的开发板,使用这个开发板可以很方便的连接wifi。同时这个开发板有很多IO口供我们使用。这个开发板的可以使用ArduinoIDE进行程序的编辑上传。具体的配置方法我就不说了,网上有很多教程。

目的:配置D1开发板连接mysql数据库,将DHT传感器读取到的数据存进mysql数据库。

准备库文件: 配置开发板连接wifi用的库文件:esp8266WIFi

配置开发板连接Mysql需要的库文件:MySQL_Connector_Arduino这些库文件可以在gitHab上找到,下面是网址:

github.com/adafruit/DH…

github.com/ChuckBell/M…

github.com/esp8266/Ard…

步骤:

准备Mysql数据库

  1. 安装mysql数据,创建一个table表用来存储数据。创建table的sql语句如下:
create database arduino_test;    // 创建一个数据库
create table test1(		//  创建一个测试表,用来存储开发板发来的信息
    tem double(3,1),
    hem double(3,1)
);
  1. 配置Mysql

    1. 首先在Dos窗口中执行命令关闭mysql服务: net stop msyql // 服务名是在安装的时候设置的
    2. 在Dos窗口切换到mysql/bin目录下,就是Mysql安装目录,默认安装的话一般都是:C:\Program Files\MySQL\MySQL Server 5.5\bin 。 或者从文件管理里面进入这个目录下,按住Shift的同时点击鼠标右键。选择在此处打开Powershel窗口。
    3. 在Dos窗口输入mysqld --skip-grant-tables命令回车。
    4. 再开一个DOS窗口,也切换到mysql\bin目录。
    5. 在新开的窗口 输入mysql 回车,
    6. 连接权限数据库:use mysql;
    7. 更改密码: update MySQL.user set authentication_string=password('root') where user='root';
    8. 开启远程连接:update user set host='%' where user='root';
    9. 最后刷新配置:flush privileges;
    10. 关闭这两个窗口
    11. 开启Mysql服务,在Dos窗口中输入 net start mysql

如果还不行就去这个网址看一下,这个大神讲的很详细,www.cnblogs.com/lzyThingkin…

编写程序上传到板子里

#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
        tostrf(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("读取传感器数据,并写入数据库");
        elete 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);
}

测试

将代码上传到板子里,打开串口可以看到传感器数据。打开数据库可以看到传感器读取的数据

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

这篇文章之前写在CSDN上,现在进行了重新排版修改。在CSDN上的地址:ESP8266开发板+mysql数据库+DHT11_不可食用盐的博客-CSDN博客_esp8266 mysql