Arduino温湿度烟雾监测上传ThingSpeak_Esp8266

一、项目介绍

本项目使用Arduino作为主控板,使用ESP-01(ESP8266)模块进行联网通信,并将数据上传到Thing Speak网站进行实时监测查看,Thing Speak将以折线图(可视化界面)展示。
Thing Speak展示部分
在这里插入图片描述

最终实现三部分数据同时上传并展示
在这里插入图片描述

二、准备工作

1.硬件部分

Arduino UNO(崭新出厂)
esp8266-01
MQ烟雾传感器
DHT11温湿度传感器

1.2 ESP8266-01配置(重点)

Esp-01原理图
在这里插入图片描述
(PS不同的板子里CH_PD = EN)
在此之前,我们需要将ESP-01刷入AT固件,后续的代码我们需要调用AT固件
对于Esp8266-01刷入AT固件的教程可以参考我的另一篇的博客有详细的教程

1.3 接线

3.软件部分

首先我们需要在Thing Speak官网注册
在这里插入图片描述
注册后进入个人频道
Channels- My Channels
在这里插入图片描述
然后在上面NEW一个Channels
在这里插入图片描述
注:选择field时一定要选择三个,因为我们要上传三个传感器的数据
创建好之后进入API keys
Write API Keys(我们需要将传感器的数据上传需要的是Write
在这里插入图片描述

之后还有还得把public View权限设置为公开
方便外界对我们的访问
在这里插入图片描述
然后在Add Visualizations里添加可视化组件和(Add Widgets是添加小组件,若有需要,可以在添加组件时候在进行可视化操作)添加组件我们选择折线图
在这里插入图片描述
这边可以Title里设置标题名称,右边的Date Min/Max可以设置监测的数值上下限
剩下设置的可以自行个性化发挥

三、代码

代码分析

esp8266-01AT 固件部分

连接Wi-Fi部分:

String AP = "Wi-Fi名称";       // Wi-Fi名称
String PASS = "Wi-Fi密码"; // Wi-Fi密码
String API = "Write-API——KEY";   // 频道的API KEY
String HOST = "api.thingspeak.com"; //连接到Thing Speak官网
String PORT = "80";	//端口80
int countTrueCommand;
int countTimeCommand; 
boolean found = false; 
int valSensor = 1;

使用AT固件进行连接Wi-Fi指令
以下指令使用AT固件指令,具体可以参考乐鑫官网的AT固件文档

sendCommand("AT",5,"OK"); //发送AT返回OK确定AT固件正常
sendCommand("AT+CWMODE=1",5,"OK");//发送设置模式1
sendCommand("AT+CWJAP=\""+ AP +"\",\""+ PASS +"\"",20,"OK");

完整代码

#include <SoftwareSerial.h> //调用
#include <dht11.h> //调用温湿度库
#include <Arduino.h> //调用

#define RX 2 //定义Arduino的RX引脚为2
#define TX 3	//定义Arduino的TX引脚为3

#define Sensor_A0 A0	//定义烟雾传感器的AO引脚
#define Sensor_D0 7		//定义烟雾传感器的DO引脚
unsigned int sensorValue = 0;


#define dht_apin 11 // 温湿度传感器连接模拟引脚
dht11 dhtObject;
String AP = "Wi-Fi名称";       // Wi-Fi名称
String PASS = "Wi-Fi密码"; // Wi-Fi密码
String API = "Write-API——KEY";   // 频道的API KEY
String HOST = "api.thingspeak.com";
String PORT = "80";
int countTrueCommand;
int countTimeCommand; 
boolean found = false; 
int valSensor = 1;
  
SoftwareSerial esp8266(RX,TX); 
  
void setup() {
    
    
  pinMode(Sensor_D0, INPUT);
  Serial.begin(9600);
  esp8266.begin(115200);
  sendCommand("AT",5,"OK");
  sendCommand("AT+CWMODE=1",5,"OK");
  sendCommand("AT+CWJAP=\""+ AP +"\",\""+ PASS +"\"",20,"OK");
}

void loop() {
    
    
  
 String getData = "GET /update?api_key="+ API +"&field1="+getTemperatureValue()+"&field2="+getHumidityValue()+"&field3="+SmokeValue();
 sendCommand("AT+CIPMUX=1",5,"OK");
 sendCommand("AT+CIPSTART=0,\"TCP\",\""+ HOST +"\","+ PORT,15,"OK");
 sendCommand("AT+CIPSEND=0," +String(getData.length()+4),4,">");
 esp8266.println(getData);delay(1500);countTrueCommand++;
 sendCommand("AT+CIPCLOSE=0",5,"OK");
}


String getTemperatureValue(){
    
    

   dhtObject.read(dht_apin);
   Serial.print(" Temperature(C)= ");
   int temp = dhtObject.temperature;
   Serial.println(temp); 
   delay(50);
   return String(temp); 
  
}


String getHumidityValue(){
    
    

   dhtObject.read(dht_apin);
   Serial.print(" Humidity in %= ");
   int humidity = dhtObject.humidity;
   Serial.println(humidity);
   delay(50);
   return String(humidity); 
  
}

String SmokeValue(){
    
    
   sensorValue = analogRead(Sensor_A0);
   Serial.print(" Somke : ");
   Serial.print(sensorValue);
   int smoke = sensorValue;
   Serial.println(smoke); 
   delay(50);
   return String(smoke); 
  
}

void sendCommand(String command, int maxTime, char readReplay[]) {
    
    
  Serial.print(countTrueCommand);
  Serial.print(". at command => ");
  Serial.print(command);
  Serial.print(" ");
  while(countTimeCommand < (maxTime*1))
  {
    
    
    esp8266.println(command);//at+cipsend
    if(esp8266.find(readReplay))//ok
    {
    
    
      found = true;
      break;
    }
  
    countTimeCommand++;
  }
  
  if(found == true)
  {
    
    
    Serial.println("OYI");
    countTrueCommand++;
    countTimeCommand = 0;
  }
  
  if(found == false)
  {
    
    
    Serial.println("Fail");
    countTrueCommand = 0;
    countTimeCommand = 0;
  }
  
  found = false;
 }

猜你喜欢

转载自blog.csdn.net/weixin_50679163/article/details/116564399