Arduino智能家居解决方案

一、接线框图

1、下载fritzing
https://github.com/fritzing/fritzing-app/releases

打开的软件界面如下:
在这里插入图片描述

2、系统框图

硬件信息:

  1. Devkit – Arduino UNO
    在这里插入图片描述
  2. 温湿度传感器 – DHT11
    在这里插入图片描述
  3. 光敏传感器 – 光敏电阻
    在这里插入图片描述
  4. 人体感应传感器 – DHT11
    在这里插入图片描述
  5. 烟雾传感器 – MQ-2
    在这里插入图片描述
  6. WiFi通信模块 – ESP8266-12F
    在这里插入图片描述
  7. TTS语音模块 – Lu6288
    在这里插入图片描述

二、Arduino IDE 下载

官网地址
在这里插入图片描述

在这里插入图片描述

P.S. 如果upload代码过程中出现can't open device /dev/ttyUSB0,Permissions Denied,运行如下指令:

sudo touch /etc/udev/rules.d/70-ttyusb.rules
echo "KERNEL=="ttyUSB[0-9]*",MODE="0666"" > /etc/udev/rules.d/70-ttyusb.rules

然后查看USB设备是否已经被赋予权限

wie@wie-virtual-machine:~/arduino-ide_2.3.2_Linux_64bit$ sudo ls -al /dev/ttyUSB*
crw-rw-rw-+ 1 root dialout 188, 0 Mar 24 18:09 /dev/ttyUSB0

三、Arduino IDE 导入 机智云 Gizwits

查看Arduino的库文件存放目录地址
在这里插入图片描述

把生成的机智云代码开发包拷贝到 arduino的库路径
在这里插入图片描述

编译成功
在这里插入图片描述

P.S. 机智云API 和ESP32 12F的通信默认采用D0和D1(与USB程序下载冲突),因此给板子下载程序的时候需要先把和ESP32 12F的连接断开

四、实现代码

sound.h – 该文件只能在win下用笔记本进行编辑,不能使用Arduino IDE 编译,否则会引起语音合成错误,在Arduino IDE看到文件内容乱码即为正确

//此处修改语音数据,MR628语音合成协议为<G>开头,
//所以只需修改<G>后的内容,请勿删除<G>或更改其位置

const char sound[]={"<G>欢迎使用MR628语音合成模块"};

main.ino

#include <DHT.h>
#include "sound.h"
#include <Gizwits.h> 
#include <Wire.h>
#include <SoftwareSerial.h>

/*

MQ-2     <----------> A2
DHT11    <----------> D2
光敏电阻  <----------> A0
HC-SR505 <----------> D3
RED_LED  <----------> D13
*/


//由于Arduino IDE编码问题,串口直接发送中文语音模块无法正确识别,因此将语音合成数据放在“sound.h”文件中,
//此文件在Arduino IDE中显示乱码,无需在意。请使用记事本打开"sound.h"文件修改语音数据,切勿在Arduino IDE中直接修改,
//否则会引起语音合成数据错误!
//此处修改语音数据,MR628语音合成协议为<G>开头,
//所以只需修改<G>后的内容,请勿删除<G>或更改其位置


/********************** GPIO setting start *************************/
#define LED 13                 // 设置LED的引脚
#define BEEP 12                // 设置BEEP的引脚
#define MQ2_PIN A2             // 设置MQ-2连接的引脚

#define DHTPIN 2               // 设置DHT11连接的引脚
#define DHTTYPE DHT11          // 设置使用的传感器类型

#define photosensitivePin A0   // 定义光敏电阻模拟口A0   光越亮,值越小;光越暗,值越大
#define phTimeInterval 1000    // 检测一次的时间间隔

#define PIROUT 3               // 设置HC-SR505热释电运动传感器连接的引脚
/********************** GPIO setting end *************************/

// enum Mode
// {
//   leisure_mode = 0;
//   work_mode;
//   quiet_mode;
// }

unsigned long phTimes = 0;     // 记录设备运行时间
int   photosenVal   = 0;          // 光照度数值
int   photoContent  = 0;
int   MQ2_Value     = 0;
float humidity      = 0;
float temperature   = 0;
bool  varW_Human    = 0;
int   mode = 0;

DHT dht(DHTPIN, DHTTYPE);        // 创建DHT对象
SoftwareSerial sound_Serial(9,8);  // 新建一个 sound_Serial 对象,RX:9,TX:8  for Lu6288
SoftwareSerial debug_Serial(A3, A4); // A3 -> RX, A4 -> TX

Gizwits myGizwits;

void setup() {
  sound_Serial.begin(9600);      // 初始化软串口通信 -- for sound report
  sound_Serial.listen();         // 监听软串口通信 -- for sound report

  Serial.begin(9600);          // 初始化串口通信 -- for ESP8266-12F

  debug_Serial.begin(9600);    // 初始化串口通信 -- for debug

  dht.begin();                 // 初始化DHT传感器
  pinMode(PIROUT, INPUT);      // 模块连接引脚D2,并设置为输入模式
  pinMode(LED,    OUTPUT);     // 模块连接引脚D13,并设置为输出入模式
  pinMode(MQ2_PIN, INPUT);     // 模块连接引脚A2,并设置为输出入模式

  myGizwits.begin();
  debug_Serial.println("GoKit init  OK \n");
 
}

void loop() {

  //   //Configure network
  // if(key < 2)
  // {
  //   delay(2000); 
  //   myGizwits.setBindMode(WIFI_AIRLINK_MODE); // WIFI_AIRLINK_MODE \ WIFI_SOFTAP_MODE \ WIFI_RESET_MODE
  //   delay(2000); 

  //   key ++;
  // }

  /********************************************************************************/
  //获取光敏电阻的值
  getPhData(); 

  // 读取温湿度传感器的数据
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();

  // 检查读取是否成功
  if (isnan(humidity) || isnan(temperature)) {
    debug_Serial.println("无法从DHT传感器读取数据!");
  }

  // 读取MQ2传感器的数据
  MQ2_Value = analogRead(MQ2_PIN);

  // 打印温湿度数据
  debug_Serial.print("湿度: ");
  debug_Serial.print(humidity);
  debug_Serial.print("%\t");
  debug_Serial.print("温度: ");
  debug_Serial.print(temperature);
  debug_Serial.print("°C");
  debug_Serial.print("%\t");
  debug_Serial.print("MQ2: ");
  debug_Serial.println(MQ2_Value);

  if (humidity > 75 || temperature > 31) {
    debug_Serial.println("温湿度大于阈值亮灯");
    digitalWrite(LED, HIGH); // 亮灯
  }

  if (digitalRead(PIROUT) == HIGH) {
    varW_Human = 1;
    debug_Serial.println("有人在这里!");
    digitalWrite(LED, HIGH);
  }
  else{
    varW_Human = 0;
    debug_Serial.println("无人在这里");
    digitalWrite(LED, LOW);
  }
  
  sound_Serial.print("<M>0");//关闭背景音乐
  delay(50);
  sound_Serial.print(sound);//发送语音合成指令
  delay(2000);  // 延迟2秒后再次读取数据

  //wifiStatusHandle();
 // if(myGizwits.wifiHasBeenSet(WIFI_CON_ROUTER))
  {
    debug_Serial.println(F("WIFI_CON_ROUTER!"));

    bool varW_Human = 1;//Add Sensor Data Collection
    myGizwits.write(VALUE_Human, varW_Human);
    unsigned long varW_Humidity = (int)humidity;//Add Sensor Data Collection
    myGizwits.write(VALUE_Humidity, varW_Humidity);
    float varW_temperature = temperature;//Add Sensor Data Collection
    myGizwits.write(VALUE_temperature, varW_temperature);
  }
  myGizwits.process();
}

/*获取光敏电阻的值*/
void getPhData() {
  if (millis() - phTimes >= phTimeInterval) {           //一定时间检测一次
    phTimes = millis();
    photosenVal = analogRead(photosensitivePin);        //获取原始值
    photosenVal = constrain(photosenVal, 10, 1024);     //原始值限制在一定范围
    photoContent = map(photosenVal, 10, 1024, 100, 0);  //映射到对应的区间
 
    debug_Serial.print("原始数据: ");                          //串口打印对应的值
    debug_Serial.print(photosenVal);                          //串口打印对应的值
    debug_Serial.print(" ,光照强度: ");                       //串口打印对应的值
    debug_Serial.print(photoContent);                         //串口打印对应的值
    debug_Serial.println(" %");                               //串口打印对应的值
  }
}

/**
* Wifi status printf  
* @param none
* @return none
*/
void wifiStatusHandle()
{ 
  if(myGizwits.wifiHasBeenSet(WIFI_CON_ROUTER))
  {
    debug_Serial.println(F("WIFI_CON_ROUTER!"));

    bool varW_Human = 1;//Add Sensor Data Collection
    myGizwits.write(VALUE_Human, varW_Human);
    unsigned long varW_Humidity = (int)humidity;//Add Sensor Data Collection
    myGizwits.write(VALUE_Humidity, varW_Humidity);
    float varW_temperature = temperature;//Add Sensor Data Collection
    myGizwits.write(VALUE_temperature, varW_temperature);
  }
}
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值