arduino+树莓派+Mysql:将传感器采集的数据存入数据库

器件:arduino、树莓派、A-B USB线、传感器(DHT11,MQ-2,门磁)、杜邦线若干、LED灯

 1、arduino端代码:

#include <dht11.h>                   //引用dht11库文件,使得下面可以调用相关参数
#define DHT11PIN 8                   //定义温湿度针脚号为8号引脚
#define MQD 2                        //定义MQ-2数字量读取引脚为2号引脚
#define MQA A0                       //定义MQ-2模拟量读取引脚为A0
dht11 DHT11;                         //实例化一个对象
const int sensor = 7;                //门磁传感器引脚
int ledPin_door=9;                   //门磁动作引脚
int state; // 0 close - 1 open wwitch
int ledPin_smoke=10;                 //MQ-2动作引脚
int ledPin_tem=11;                   //DHT11温度监测动作引脚
int ledPin_hum=12;                   //DHT11湿度监测动作引脚
int ledPin_fan=13;                   //风扇动作引脚


void setup(){         //初始化设置
  Serial.begin(9600);      //设置波特率参数
  //DHT11
  pinMode(DHT11PIN,OUTPUT);
  pinMode(ledPin_tem,OUTPUT);  //定义输出口
  pinMode(ledPin_hum,OUTPUT);
  pinMode(ledPin_fan,OUTPUT);
  //MQ-2
  pinMode(MQD,INPUT);
  pinMode(MQA,INPUT);
  pinMode(ledPin_smoke,OUTPUT);
  //door
  pinMode(ledPin_door,OUTPUT);
  pinMode(sensor, INPUT_PULLUP);
}

void loop(){                          //循环
 
  Serial.print("ok");
  //DHT11
  int chk = DHT11.read(DHT11PIN);     //将读取到的值赋给chk
  int hum=(float)DHT11.humidity;      //将湿度值赋给hum
  if(hum>=30)
    {
      digitalWrite(ledPin_hum,HIGH);    //超过适宜湿度LED灯亮
      digitalWrite(ledPin_fan,HIGH);    //风扇开始转
      }   
  else
    { digitalWrite(ledPin_hum,LOW);   }   //没有超过适宜湿度LED灯灭
 // Serial.print("hum:");              //打印hum:
  Serial.print(hum);                 //打印湿度值
  Serial.print("%/t");               //打印%/t
  int tem=(float)DHT11.temperature;   //将湿度值赋给tem
  if(tem>=30)
    { digitalWrite(ledPin_tem,HIGH);  }  //超过适宜温度LED灯亮
  else
    {digitalWrite(ledPin_tem,LOW);   }    //没有超过适宜温度LED灯灭
 // Serial.print("  tem:");             //打印tem:
  Serial.print(tem);                 //打印温度值
  Serial.print("*C");                //打印*C
  //MQ-2
 // Serial.print("  smoke:");             //打印smoke
  Serial.print(analogRead(MQA));      //打印气体模拟值
  if(digitalRead(MQD)==HIGH)             //判断数字量引脚 是否为高电平
    {
      digitalWrite(ledPin_smoke,HIGH);
      digitalWrite(ledPin_fan,HIGH);
      }
   else
    {
      digitalWrite(ledPin_smoke,LOW);   
      }
 //door
 state = digitalRead(sensor);
  if (state == HIGH){
    Serial.println("open");
    digitalWrite(ledPin_door,HIGH);
  }
  else{
    Serial.println("clos");
    digitalWrite(ledPin_door,LOW);
  }
 delay(1000);                         //延时1000毫秒
}

为 方便树莓派截取各个数据,没有对arduino的打印输出分隔开。

2、mysql安装好后,选择一个datebase建表。

我建的表homedb,其中id为主键,id和date都是自动生成。

3、树莓派端代码:

注意:提前安装“pymysql”、“serial”这两个依赖文件。

安装依赖库文件代码:sudo pip install pymysql

                                    sudo pip install serial

4、测试结果

arduino运行无误的前提下,执行入库文件:

python savedb.py

执行10秒左右即可停止Ctrl+c,然后到数据库查询看数据是否存入,我用的是可视化数据库管理工具Navicat如下:

新手菜鸟一枚,希望对大家有帮助,也希望大家多多指教,共同进步哈@^@

猜你喜欢

转载自blog.csdn.net/zxr15709447338/article/details/86555701