“开源WiFi气象站系统/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
文档
第3行: 第3行:
 
|
 
|
 
==概述==
 
==概述==
*项目名称:开源WiFi气象站系统
+
*项目名称:开源WiFi气象站系统(ESP8266连接Blynk)
 
*目的:获取身边实时的温度、湿度、光照甚至pm2.5数据
 
*目的:获取身边实时的温度、湿度、光照甚至pm2.5数据
 
*难度:中
 
*难度:中
*耗时:5小时
+
*耗时:2小时
*制作者:
+
*制作者:ray
*简介:
+
 
它能够获取你身边实时的温度、湿度、光照甚至pm2.5数据,并且在屏幕上显示出来,如果你需要,甚至可以将其接入互联网,只要有一台能上网的手机或者计算机,任何地方、任何时候都能查看到这些数据。而这套系统完全由Microduino来实现,非常简单。
+
简介:
 +
*它能够获取你身边实时的温度、湿度、光照甚至pm2.5数据,并且在屏幕上显示出来
 +
*并把这些数据上传到Blynk上
 +
*你可以通过手机(android或者Apple)来获取气象信息和用手机发送信息到气象站
 +
*这套系统完全由Microduino来实现,非常简单。
 +
 
 
==材料清单==
 
==材料清单==
*Microduino设备
+
===Microduino设备===
 
{|class="wikitable"
 
{|class="wikitable"
 
|-
 
|-
第20行: 第25行:
 
|[[Microduino-USBTTL/zh]] ||1||下载程序
 
|[[Microduino-USBTTL/zh]] ||1||下载程序
 
|-
 
|-
|[[Microduino-WiFi/zh]] ||1||连接网络
+
|[[Microduino-Module WIFI,ESP/zh]] ||1||连接网络
 +
|-
 +
|[[Microduino-Module Sensor Hub/zh]] ||1||连接传感器
 +
|-
 +
|[[Microduino-Shield Duo-H/zh]] ||1||扩展板
 +
|-
 +
|[[Microduino-OLED/zh]] ||1||显示
 +
|}
 +
 
 +
{|class="wikitable"
 +
|-
 +
|传感器||数量||功能
 
|-
 
|-
 
|[[Microduino-Temp&Hum/zh]] ||1||数字温湿度传感器
 
|[[Microduino-Temp&Hum/zh]] ||1||数字温湿度传感器
第28行: 第44行:
 
|[[Microduino-Light/zh]] ||1||光照传感器
 
|[[Microduino-Light/zh]] ||1||光照传感器
 
|-
 
|-
|[[Microduino-OLED/zh]] ||1||显示
+
|[[GP2Y1010AU0F/zh]] ||1||PM2.5传感器
 
|}
 
|}
*其他设备
+
 
 +
===其他设备===
 
{|class="wikitable"
 
{|class="wikitable"
 
|-
 
|-
|模块||数量||功能
+
|设备||数量||功能
 
|-
 
|-
 
|Micro-USB线||1||下载程序、供电
 
|Micro-USB线||1||下载程序、供电
|-
 
|[[Microduino-USBTTL/zh]] ||1||下载程序
 
 
|-
 
|-
 
|GP2Y1010AU0F ||1||pm2.5传感器
 
|GP2Y1010AU0F ||1||pm2.5传感器
第50行: 第65行:
  
 
==实验原理==
 
==实验原理==
气象站专用板上安装了多参数传感器,包括数字温湿度传感器(Microduino-Tem&Hum)、光照强度传感器(Microduino-Light)、空气质量传感器(Microduino-Air)和pm2.5传感器(GP2Y1010AU0F)。每个传感器均与Microduino-Sensorhub连接,由Microduino核心(Microduino Core+)对传感器数据分析处理,以直观的文字提示方式在OLED中显示。同时通过Microduino CC3000模块(wifi)使Microduino核心连接到网络,与mCotton物联网平台通讯并以直观的文字和图表信息反馈给用户,用户只需要用通过能上网的手机或者计算机,在任何地方任何时候都能查看到这些数据,用户甚至可以设置传感器值来触发微博,与大家一起分享你的生活。
+
气象站可以检测的数据包括:
总的来说,用户通过气象站可以随时随地感受的身边环境的变化,把无形变有形,去感受大自然的瞬息万变。
+
*温湿度,通过数字温湿度传感器[[Microduino-Temp&Hum/zh]]
[[File:Wifistationtheory.jpg||600px|center]]
+
*光照,通过光照强度传感器[[Microduino-Light/zh]]
 +
*空气质量,通过空气质量传感器[[Microduino-Air quality/zh]]
 +
*pm2.5,通过pm2.5传感器GP2Y1010AU0F
  
本系统由传感器、协调器、网络适配器、OLED显示器、mCotton物联网平台五个部分组成,综合了传感技术、网络通信技术、OLED显示技术和物联网技术。传感器主要完成温度、湿度、光照参数、空气质量的采集,协调器分析处理采集的数据,同时通过网络适配器连接到网络与mCotton物联网平台通信,从而可以在mCotton物联网平台下查看到这些数据。
 
  
[[File:Wifistationtheory1.jpg||600px|center]]
+
*由Microduino核心[[Microduino-Core+/zh]]对传感器数据分析处理
 +
*在OLED [[Microduino-OLED/zh]]中显示
 +
*同时通过[[Microduino-Module WIFI,ESP/zh]]使气象站与Blynk相连
 +
*每个传感器均与[[Microduino-Module Sensor Hub/zh]]连接
 +
[[File:Wifistationtheory.jpg||600px|center]]
  
*管理平台构成
+
==获取,配置Blynk==
管理平台大致可分为两个部分:一是Microduino核心控制,负责采集传感器数据,并且连接到互联网。二是mCotton物联网平台,负责将数据以曲线形式直观显示给用户,用户可以随时随地查看,并且可以设置微博触发,分享你的生活环境。如图2-2所示:
+
下面就通过气象站的配置过程了解Microduino与Blynk是如何交互的
*主要传感器
 
  
[[File:Wifistationtheory2.jpg||600px|center]]
+
===获取Blynk手机客户端===
 +
*请参考教程:[[https://www.microduino.cn/wiki/index.php/Microduino-Blynk_Getting_start/zh#.E5.88.9B.E5.BB.BA.E9.A1.B9.E7.9B.AE 获取,配置Blynk]]
  
下图展示了本系统的处理流程。数据采集系统:主要负责对环境温度、湿度、光照强度等数据的采集。传感器采集的数据上传到Microduino核心,具有扩展方便等优点。
+
===添加配置控件===
无线传输系统:该系统主要将设备采集到的数据,通过无线网络传送到服务器上,使用WiFi传输数据。
+
*你可以扫描下方二维码来获取气象站APP
数据处理系统:该系统负责对采集的数据进行上传存储、直观显示,用户可随时随地通过电脑和手机等终端进行查询。
+
[[File:BlynkWeatherStationLink.png||300px|center]]
 +
*当然你也可以自己动手做一个
 +
*选择自己做的话就点击面板可以调出'''WIDGET BOX''',上边有很多控件供你选择。
 +
[[File:BlynkSetting3.png||200px|center]]
 +
*添加'''Value Display'''控件,给其命名为“tempture”用以显示获取到的'''温度值'''
 +
*'''INPUT'''选择V2,'''READING FREQUENCY'''选择PUSH表示温度是气象站主动发送的,频率由Microduino端控制
 +
[[File:BlynkSetting4.png||200px|center]]
 +
在Microduino端对应的代码是:
 +
<source lang="cpp">
 +
void senTempHumi() {
 +
  am2321.read();
 +
  float sensor_tem = am2321.temperature / 10.0;
 +
  float sensor_hum = am2321.humidity / 10.0;
 +
  Blynk.virtualWrite(V2, sensor_tem);
 +
  Blynk.virtualWrite(V3, sensor_hum);
  
[[File:Wifistationtheory3.jpg||600px|center]]
+
  oled(sensor_tem, sensor_hum, sensor_light, sensorPM25, Sensor_etoh);
 
+
}
==文档==
+
</source>
气象站代码:【'''[[media:Weather v2.rar|气象代码]]'''
+
*湿度的设置跟温度类似,'''INPUT'''设置成V3,都是通过一个定时器函数senTempHumi()一起发送的
 
+
[[File:BlynkSetting5.png||200px|center]]
本地版气象站代码:【'''[[Media:Weather v2 new.rar|本地气象代码]]'''】
+
定时器的频率是通过以下两句代码实现的
 
+
<source lang="cpp">
气象站代码Github:[https://github.com/Microduino/CC3000WeatherStation Weather_Station]
+
void senTempHumi() {
 
+
   SimpleTimer temHumtimer;
==调试过程==
+
   temHumtimer.setInterval(2000L, senTempHumi);
*搭建服务器
+
}
气象站既然要连入互联网,一个用来储存和显示的服务器必不可少,首先我们需要搭建好一个网络服务器。
+
</source>
*关于mCotton
+
*PM2.5的'''INPUT'''设置成V6,'''READING FREQUENCY'''设置成5秒钟,代表获取PM2.5数据的频率
目前定位于做一个开放的通用物联网平台,主要提供传感器数据的接入,存储和展现服务,为所有的开源软硬件爱好者、制造型企业,提供一个物联网项目的平台,
+
[[File:BlynkSetting6.png||200px|center]]
使得硬件和制造业者能够在不关心服务器实现细节和运维的情况下,拥有交付物联网化的电子产品的能力。
+
对应的Microduino端的代码如下:
我们只需在mCotton注册一个账号,它会提供给你一个唯一的API KEY,这个便是用来在服务器里判别唯一身份之用的。
 
mCotton作为一个开放的公共物联网接入平台,目的是为服务所有所有的爱好者和开发者,使传感器数据的接入、存储和展现变得轻松简单。
 
下面我们介绍一下如何使用mCotton平台完成您的轻松接入。
 
*注册
 
打开mCotton的主页:somvpn.cn:3000,在页面中点击”Sign in/Join”,然后会弹出登录/注册框,再点击“Create account”进入用户注册页面。
 
 
 
[[File:mcottonsign1.jpg||600px|center]]
 
 
 
在用户注册页面,填写相关信息后点击完成注册
 
 
 
[[File:mcottonsign2.jpg||600px|center]]
 
*增加设备
 
登陆后点击”Projects“进入工程页面
 
 
 
[[File:mcottonsign3.jpg||600px|center]]
 
 
 
在工程页面中找到”Weather Station”项目,点击其中的“Assemble to My Devices”按钮,可以添加自己的设备
 
 
 
[[File:mcottonsign4.jpg||600px|center]]
 
 
 
在“Name”中输入自己的设备名称,然后点击“Submit”按钮发布
 
 
 
[[File:mcottonsign5.jpg||600px|center]]
 
*获得APIKEY
 
发布完毕后就可以在“My Garage”页面中看到自己的设备
 
[[File:mcottonsign6.jpg||600px|center]]
 
找到自己发布的气象站设备,可以看到该设备专属的设备ID,记下它
 
[[File:mcottonsign7.jpg||600px|center]]
 
*下载程序
 
将Microduino-Core+与Microduino-USBTTL叠加(无上下顺序),通过USB数据线与电脑连接起来
 
[[File:download1.jpg||400px|center]]
 
确认你搭建了Microduino的开发环境,否则参考附录1-Arduino IDE安装指导。
 
[[File:Gettingstarted.jpg||400px|center]]
 
打开Arduino IDE编程软件,点击 【文件】->【打开】
 
[[File:Dl1.jpg||600px|center]]
 
浏览到项目程序地址,点击“weatherCC3000.ino”程序打开
 
[[File:WiFiStationopen.jpg||600px|center]]
 
[[File:WiFiStationopen2.jpg||600px|center]]
 
在def.h文件中需要设置相应的配置参数:
 
#define WLAN_SSID   “你要连接的WiFi的网络名”
 
#define WLAN_PASS   “你要连接的WiFi的密码”
 
#define WEBSITE   “设置的服务器地址”
 
#define WEBSITEPORT        “设置的服务器端口号”
 
#define APP_KIT_ID   “步骤3获得的设备ID号”
 
[[File:WiFiStationopen3.jpg||600px|center]]
 
点击“工具”,在板选项里面选择板卡(Microduino-Core+),在处理器选项里面选择处理器(Atmega644pa@16M,5V),再在端口选项里面选择正确的端口号,然后直接烧录程序
 
[[File:WiFiStationopen4.jpg||600px|center]]
 
 
 
==拼装气象站==
 
*'''Step1''':将OLED屏和A1用螺丝固定在一起
 
[[File:Waetherstep1.jpg||600px|center]]
 
*'''Step2''':把B1~B5用B6拼接在一起
 
[[File:Waetherstep2.jpg||600px|center]]
 
*'''Step3''':将Core+,USBTTL,Hub连接在一起并且用螺丝螺帽固定在A2上,再将传感器连接线连接在PM2.5传感器上
 
PM2.5传感器使用胶水黏在底板上
 
[[File:Waetherstep3.jpg||600px|center]]
 
*'''Step4''':将B7,B8,B9按照如图所示分别拼接到温湿度传感器,气体传感器和光照传感器上
 
[[File:Waetherstep4.jpg||600px|center]]
 
*'''Step5''':按说明图上所示的位置将温湿度传感器、气体传感器和光照传感器连接到Hub板上
 
再分别将传感器固定在Step2中内部四周B1和B2组合的卡槽上,完成后将A1和A2分别接在其顶部和底部
 
[[File:Waetherstep5.jpg||600px|center]]
 
*'''Step6''':完成上述步骤后用B0进行固定,之后插上USB线,气象站完成
 
 
 
设置完成后就可以在OLED上看到各个传感器的数据
 
同时在mCotton上设置好的设备上也能看到气象站上传的数据
 
[[File:WiFiStation10.jpg||600px|center]]
 
 
 
==程序说明==
 
国内可用:
 
*主程序部分
 
 
<source lang="cpp">
 
<source lang="cpp">
//1,屏幕显示部分=============================
+
BLYNK_READ(V6) {
#include"Arduino.h"
+
  Blynk.virtualWrite(V6, sensorPM25);
#include "U8glib.h"
+
}
//2,传感器部分================================
 
#include <Wire.h>
 
#include "I2Cdev.h"
 
#include <AM2321.h>
 
#include <SoftwareSerial.h>
 
//3,WIFI部分================================
 
#include <Adafruit_CC3000.h>
 
#include <ccspi.h>
 
#include <SPI.h>
 
#include <string.h>
 
#include "utility/debug.h"
 
//4,自定义部分=============================
 
#include "def.h"
 
#include "oled.h"
 
#include "wifi.h"
 
#include "sensor.h"
 
 
#define INTERVAL_LCD            200        //OLED及传感器刷新时间间隔   
 
#define INTERVAL_NET            30000      //传感器数据上传时间间隔 
 
 
unsigned long lcd_time = millis();          //OLED及传感器更新计时器
 
unsigned long net_time = millis();          //传感器数据上传更新计时器
 
 
void setup(void)  
 
{  
 
    Serial.begin(115200);    //初始化波特率
 
    setup_wifi();            //初始化WIFI
 
}
 
 
void loop(void)
 
{
 
 
    if (lcd_time > millis()) lcd_time = millis();
 
    if (millis() - lcd_time > INTERVAL_LCD)
 
    {
 
        SensorUpdate();        //更新传感器
 
        volcd(sensorTemp, sensorHumi, sensorLight, sensorPM25, sensorEtoh);  //更新OLED显示
 
        lcd_time = millis();    //更新计时器
 
    }
 
 
    if (net_time > millis()) net_time = millis();
 
    if (millis() - net_time > INTERVAL_NET)
 
    {
 
        updateWeatherData(sensorTemp, sensorHumi, sensorLight, sensorPM25, sensorEtoh);  //上传传感器数据
 
        net_time = millis();   //更新计时器
 
    }
 
}  
 
 
</source>
 
</source>
*用户配置部分
+
*同理,光照传感器的'''INPUT'''设置为V4,频率为3秒钟获取一次
def.h
+
[[File:BlynkSetting7.png||200px|center]]
 +
对应的Microduino端的代码如下:
 
<source lang="cpp">
 
<source lang="cpp">
#define WLAN_SSID      "AZURE"      //WIFI网络名
+
BLYNK_READ(V4) {
#define WLAN_PASS      "azure001"    //WIFI密码
+
  sensor_light = map(analogRead(A0), 0, 1023, 0, 255);
 
+
  Blynk.virtualWrite(V4, sensor_light);
#define WEBSITE "mcotton.microduino.cn" //服务器网址
+
}
#define WEBSITEPORT 8080 //服务器端口号
 
#define APP_KIT "TLcrn6vaAahjnvKR2" //设备ID号#define APP_KIT "YourDeviceID" //设备ID号
 
 
 
#define WEBPAGE "/api/v1.0/d"
 
#define WEBUTTONPAGE "/api/v1.0/ce"
 
 
</source>
 
</source>
*OLED显示部分
+
*甲烷气体的'''INPUT'''为V5,频率为5秒钟获取一次
 +
[[File:BlynkSetting8.png||200px|center]]
 +
对应的Microduino端的代码如下:
 
<source lang="cpp">
 
<source lang="cpp">
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);    //设置OLED型号 
+
BLYNK_READ(V5) {
//-------字体设置,大、中、小 
+
   Sensor_etoh= map(analogRead(A2), 0, 1023, 0, 30);
#define setFont_L u8g.setFont(u8g_font_7x13) 
+
   Blynk.virtualWrite(V5, Sensor_etoh);
#define setFont_M u8g.setFont(u8g_font_fixed_v0r) 
 
#define setFont_S u8g.setFont(u8g_font_chikitar) 
 
 
 
//温度计图案
 
const unsigned char bmp_tem[] U8G_PROGMEM =
 
{
 
   0xE0,0x81,0x30,0x83,0x10,0x82,0x10,0x82,0x10,0xFA,0x10,0x82,
 
  0x10,0x82,0x10,0xFA,0x10,0x82,0xD0,0x82,0xD0,0xFA,0xD0,0x82,
 
  0xD0,0x82,0xD0,0xFA,0xD0,0x82,0xD0,0x82,0xD0,0xFA,0xD0,0x82,
 
  0xD0,0x82,0xD8,0x86,0xC4,0x88,0xF2,0x93,0xFB,0xB7,0xF9,0xA7,
 
  0xFD,0xAF,0xFD,0xAF,0xF9,0xA7,0xFA,0x97,0xF2,0x93,0xC4,0x88,
 
  0x18,0x86,0xF0,0x83
 
};
 
 
 
//水滴图案
 
const unsigned char bmp_hum[] U8G_PROGMEM =  
 
{
 
  0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x80,0x03,0x08,0x80,0x03,0x18,0x80,0x07,0x1C,
 
  0xC0,0x07,0x3C,0xC0,0x07,0x3E,0xE0,0x0F,0x3E,0xE0,0x0F,0x7A,0xF0,0x1F,0x7B,0xF8,
 
  0x1F,0x72,0xF8,0x1F,0x3E,0xF8,0x3F,0x1C,0xFC,0x3F,0x00,0xFC,0x7F,0x00,0xFE,0x7F,
 
  0x00,0xFE,0x7F,0x00,0xFE,0x7F,0x00,0xFF,0xFF,0x00,0xFF,0xFF,0x00,0xFF,0xFF,0x00,
 
  0xF3,0xFF,0x00,0xF2,0x7F,0x00,0xE6,0x7F,0x00,0xC6,0x7F,0x00,0x0E,0x3F,0x00,0x3C,
 
  0x1E,0x00,0xF8,0x1F,0x00,0xE0,0x07,0x00,0x80,0x01
 
};
 
 
 
//显示函数 
 
void osd_setup(int _osd_setup,char* _osd_text) {
 
  u8g.firstPage()
 
  do {
 
    setFont_L;
 
    u8g.setPrintPos(4, 30);
 
    u8g.print(_osd_text);
 
    u8g.drawFrame(0,48,128,14);
 
    if(_osd_setup)
 
      u8g.drawBox(0+2,48+2,map(_osd_setup,0,5,0,128-4),14-4);
 
   }
 
  while( u8g.nextPage() );
 
 
}
 
}
 +
</source>
 +
*接下来放一个按钮控件
 +
*'''OUTPUT'''设置为D6,'''MODE'''设置为SWITCH,表示按一下按钮可以切换Microduino端的D6引脚高低电平
 +
[[File:BlynkSetting9.png||200px|center]]
 +
*为了更直观的显示数据可以添加一个或几个历史图标'''History Graph'''
 +
*可以设置成显示V2和V3的数据图表,最多可现实四个数据
 +
[[File:BlynkSetting10.png||200px|center]]
 +
*第二个'''History Graph'''可以用来单独显示V6,PM2.5
 +
[[File:BlynkSetting11.png||200px|center]]
 +
*最终你的手机面板就变成了这样
 +
[[File:BlynkSetting12.png||200px|center]]
  
 +
==下载程序==
  
//显示函数
+
气象站代码:[https://github.com/Microduino/ESP8266BlynkWeatherStation ESP8266BlynkWeatherStation]
void volcd(float temp, float humi, float light, float pm25, float etoh) {
 
  u8g.firstPage();
 
  do {
 
    u8g.setDefaultForegroundColor();
 
  
    u8g.drawXBMP( 4, 1, 15, 32, bmp_tem);
+
==程序烧写==
    u8g.drawXBMP( 70, 2, 24, 30, bmp_hum);
+
*将[[Microduino-Core+/zh]]、[[Microduino-USBTTL/zh]]堆叠在一起。用数据线连接其中的[[Microduino-USBTTL/zh]]上传程序。
 +
**注意:最好不要将所有模块堆叠在一起之后再上传程序
 +
*打开Arduino IDE for Microduino,环境,(搭建参考:[[AVR核心:Getting started/zh]])
 +
*确认板卡(Microduino-Core+)处理器(Atmega644Pa)选择无误,并选中对应端口号(COMX)
 +
*打开你所下载的项目中“ESP8266BlynkWeatherStation.ino”程序
 +
*几项都无误后,点击"→"按钮下载程序到开发板上
  
    setFont_M;                            //设置字体为大 
+
==拼装气象站==
    u8g.setPrintPos(20, 16);        //设置文字开始坐标 
+
===Step1===
    u8g.print("`C "); 
+
*将[[Microduino-OLED/zh]]和'''结构-A1'''用螺丝固定在一起
    setFont_L;                            //设置字体为大 
+
[[File:Waetherstep1.jpg||600px|center]]
    u8g.setPrintPos(20, 32);        //设置文字开始坐标 
+
===Step2===
    u8g.print(temp , 1);            //温度 
+
*把'''结构-B1~B5'''用'''结构-B6'''拼接在一起
 +
[[File:Waetherstep2.jpg||600px|center]]
  
    setFont_M;                            //设置字体为大 
+
===Step3===
    u8g.setPrintPos(100, 16);        //设置文字开始坐标 
+
**使用'''螺丝螺帽'''把[[Microduino-Shield Duo-H/zh]]固定在'''结构-A2'''上
    u8g.print("%"); 
+
**将以下模块堆叠在[[Microduino-Shield Duo-H/zh]]上
    setFont_L;                            //设置字体为大 
+
***[[Microduino-Core+/zh]]
    u8g.setPrintPos(100, 32);        //设置文字开始坐标 
+
***[[Microduino-USBTTL/zh]]
    u8g.print(humi , 0);            //湿度 
+
***[[Microduino-Module Sensor Hub/zh]]
 +
**并将准备好的'''PM2.5传感器'''[[GP2Y1010AU0F/zh]]用胶水黏在底板上
 +
[[File:Waetherstep3.jpg||600px|center]]
  
    setFont_L;                      //设置字体
+
===Step4===
    u8g.setPrintPos(4, 49);          //设置文字开始坐标 
+
*将以下传感器分别用'''结构-B7,B8,B9'''装配
    u8g.print(light , 0);      //光照强度 
+
**温湿度传感器[[Microduino-Temp&Hum/zh]]
    setFont_M;                      //设置字体
+
**气体传感器[[Microduino-Air quality/zh]]
    u8g.print(" Lux"); 
+
**光照传感器[[Microduino-Light/zh]]
 
+
[[File:Waetherstep4.jpg||600px|center]]
    setFont_L;                      //设置字体
+
===Step5===
    u8g.setPrintPos(4, 63);          //设置文字开始坐标
+
*按图示的引脚定义将以下传感器连接到[[Microduino-Module Sensor Hub/zh]]板上
    u8g.print(pm25 , 1);      //光照强度
+
**温湿度传感器[[Microduino-Temp&Hum/zh]]
    setFont_M;                      //设置字体
+
**气体传感器[[Microduino-Air quality/zh]]
    u8g.print(" ug/m3");
+
**光照传感器[[Microduino-Light/zh]]
 
+
*按图示,再将所有传感器固定在'''结构-B1'''和'''结构-B2'''的卡槽上
 
+
*完成后将'''结构-A1'''和'''结构-A2'''分别接在其顶部和底部
    setFont_L;                      //设置字体
+
[[File:Waetherstep5.jpg||600px|center]]
    u8g.setPrintPos(80, 49);          //设置文字开始坐标
 
    u8g.print(etoh , 0);      //光照强度
 
    setFont_M;                      //设置字体
 
    u8g.print(" ppm");
 
 
 
 
 
    setFont_M;                            //设置字体为大
 
    u8g.setPrintPos(80, 63);        //设置文字开始坐标
 
    u8g.print(" LED:");
 
  
  }
+
===Step6===
  while( u8g.nextPage() );
+
*完成上述步骤后用'''结构-B0'''进行固定,之后插上USB线,气象站完成
}
 
  
 +
===Step7===
 +
*设置完成后就可以在[[Microduino-OLED/zh]]上看到各个传感器的数据
 +
*同时在手机Blynk上也能看到气象站上传的数据
 +
[[File:BlynkSetting13.png||300px|center]]
  
void volcdsetup(char* zi,unsigned int x,unsigned int y) {
+
==注意事项==
  //#ifdef OLED
+
*确保Blynk验证码配置正确,可通过把验证码发送到邮箱,复制,粘贴确保一致性。
  u8g.firstPage(); 
+
*确保家里的路由器运行正常,SSID和密码填写正确
  do {
 
    setFont_L;   
 
    u8g.setPrintPos(x, y);
 
    u8g.print(zi);
 
  }
 
  while( u8g.nextPage() );
 
  //#endif
 
}
 
</source>
 
*传感器数据采集部分
 
<source lang="cpp">
 
  #include <SoftwareSerial.h>
 
#include <AM2321.h>
 
 
 
AM2321 am2321;
 
SoftwareSerial pmSerial(4,5); //PM2.5传感器通讯软串口
 
 
 
float sensorTemp;      //温度值
 
float sensorHumi;      //湿度值
 
float sensorPM25;      //pm2.5浓度
 
float sensorLight;      //光照强度
 
float sensorEtoh;      //空气质量
 
 
 
//读取pm2.5传感器
 
float PM25(){
 
  int data_s = 0; //串口接收数据
 
  int num = -1;   //串口接收数据计数
 
  int sum = 0;   //校验和
 
  int cal[5];     //接收数据缓存
 
  float dustDensity = 0; //PM2.5浓度
 
 
 
  pmSerial.begin(2400); //首先启动软串口
 
  pmSerial.flush();   //清空串口缓存
 
 
 
  while(1)
 
  {
 
    if(pmSerial.available() > 0) //串口缓存有数据
 
    {
 
      data_s = pmSerial.read(); //读取串口缓存数据
 
      if(data_s == 0xAA)     //得到数据帧起始位
 
      {
 
        num = 0;            //开始计数
 
      }
 
      else if(num >= 0)
 
      {
 
        num++;         //读到数据,计数+1
 
        cal[num-1] = data_s; //数据保存到缓存中
 
        if(num == 6)       //读到数据帧最后一位
 
        {
 
          sum = cal[0] + cal[1] + cal[2] + cal[3]; //计算校验和
 
          if(sum == cal[4] && cal[5] == 0xFF)   //校验和匹配,数据帧最后一位为0xFF,说明接收的数据帧正常
 
          {
 
            dustDensity = (cal[0]*256 + cal[1])*(5.0/1024)*550; //计算PM2.5浓度,单位ug/m3
 
          }
 
          else //接收的数据不正常
 
          {
 
            dustDensity = 0;    //浓度清零
 
          }
 
          break;
 
        }
 
      }
 
    } 
 
  }
 
  pmSerial.end(); //关闭软串口
 
  return dustDensity; //返回值
 
}
 
 
 
//更新传感器数据
 
void SensorUpdate() {
 
 
 
  //获取pm2.5浓度
 
  sensorPM25 = PM25();
 
  //获取温度,湿度
 
  am2321.read();
 
  sensorTemp = am2321.temperature / 10.0;
 
  sensorHumi = am2321.humidity / 10.0;
 
  //获取光照强度
 
  sensorLight = map(analogRead(A0), 0, 1023, 0, 255);
 
  //获取空气质量
 
  sensorEtoh= map(analogRead(A2), 0, 1023, 0, 30);
 
 
 
}
 
</source>
 
  
==视频==
 
 
|}
 
|}

2016年3月13日 (日) 12:36的版本

概述

  • 项目名称:开源WiFi气象站系统(ESP8266连接Blynk)
  • 目的:获取身边实时的温度、湿度、光照甚至pm2.5数据
  • 难度:中
  • 耗时:2小时
  • 制作者:ray

简介:

  • 它能够获取你身边实时的温度、湿度、光照甚至pm2.5数据,并且在屏幕上显示出来
  • 并把这些数据上传到Blynk上
  • 你可以通过手机(android或者Apple)来获取气象信息和用手机发送信息到气象站
  • 这套系统完全由Microduino来实现,非常简单。

材料清单

Microduino设备

模块 数量 功能
Microduino-Core+/zh 1 核心板
Microduino-USBTTL/zh 1 下载程序
Microduino-Module WIFI,ESP/zh 1 连接网络
Microduino-Module Sensor Hub/zh 1 连接传感器
Microduino-Shield Duo-H/zh 1 扩展板
Microduino-OLED/zh 1 显示
传感器 数量 功能
Microduino-Temp&Hum/zh 1 数字温湿度传感器
Microduino-Air quality/zh 1 空气质量传感器
Microduino-Light/zh 1 光照传感器
GP2Y1010AU0F/zh 1 PM2.5传感器

其他设备

设备 数量 功能
Micro-USB线 1 下载程序、供电
GP2Y1010AU0F 1 pm2.5传感器
螺丝 7 固定模块
螺丝刀 1 固定螺丝
外壳 1

实验原理

气象站可以检测的数据包括:


Wifistationtheory.jpg

获取,配置Blynk

下面就通过气象站的配置过程了解Microduino与Blynk是如何交互的

获取Blynk手机客户端

添加配置控件

  • 你可以扫描下方二维码来获取气象站APP
BlynkWeatherStationLink.png
  • 当然你也可以自己动手做一个
  • 选择自己做的话就点击面板可以调出WIDGET BOX,上边有很多控件供你选择。
BlynkSetting3.png
  • 添加Value Display控件,给其命名为“tempture”用以显示获取到的温度值
  • INPUT选择V2,READING FREQUENCY选择PUSH表示温度是气象站主动发送的,频率由Microduino端控制
BlynkSetting4.png

在Microduino端对应的代码是:

void senTempHumi() {
  am2321.read();
  float sensor_tem = am2321.temperature / 10.0;
  float sensor_hum = am2321.humidity / 10.0;
  Blynk.virtualWrite(V2, sensor_tem);
  Blynk.virtualWrite(V3, sensor_hum);

  oled(sensor_tem, sensor_hum, sensor_light, sensorPM25, Sensor_etoh); 
}
  • 湿度的设置跟温度类似,INPUT设置成V3,都是通过一个定时器函数senTempHumi()一起发送的
BlynkSetting5.png

定时器的频率是通过以下两句代码实现的

void senTempHumi() {
  SimpleTimer temHumtimer;
  temHumtimer.setInterval(2000L, senTempHumi);
}
  • PM2.5的INPUT设置成V6,READING FREQUENCY设置成5秒钟,代表获取PM2.5数据的频率
BlynkSetting6.png

对应的Microduino端的代码如下:

BLYNK_READ(V6) {
  Blynk.virtualWrite(V6, sensorPM25);
}
  • 同理,光照传感器的INPUT设置为V4,频率为3秒钟获取一次
BlynkSetting7.png

对应的Microduino端的代码如下:

BLYNK_READ(V4) {
  sensor_light = map(analogRead(A0), 0, 1023, 0, 255);
  Blynk.virtualWrite(V4, sensor_light);
}
  • 甲烷气体的INPUT为V5,频率为5秒钟获取一次
BlynkSetting8.png

对应的Microduino端的代码如下:

BLYNK_READ(V5) {
  Sensor_etoh= map(analogRead(A2), 0, 1023, 0, 30);
  Blynk.virtualWrite(V5, Sensor_etoh);
}
  • 接下来放一个按钮控件
  • OUTPUT设置为D6,MODE设置为SWITCH,表示按一下按钮可以切换Microduino端的D6引脚高低电平
BlynkSetting9.png
  • 为了更直观的显示数据可以添加一个或几个历史图标History Graph
  • 可以设置成显示V2和V3的数据图表,最多可现实四个数据
BlynkSetting10.png
  • 第二个History Graph可以用来单独显示V6,PM2.5
BlynkSetting11.png
  • 最终你的手机面板就变成了这样
BlynkSetting12.png

下载程序

气象站代码:ESP8266BlynkWeatherStation

程序烧写

  • Microduino-Core+/zhMicroduino-USBTTL/zh堆叠在一起。用数据线连接其中的Microduino-USBTTL/zh上传程序。
    • 注意:最好不要将所有模块堆叠在一起之后再上传程序
  • 打开Arduino IDE for Microduino,环境,(搭建参考:AVR核心:Getting started/zh
  • 确认板卡(Microduino-Core+)处理器(Atmega644Pa)选择无误,并选中对应端口号(COMX)
  • 打开你所下载的项目中“ESP8266BlynkWeatherStation.ino”程序
  • 几项都无误后,点击"→"按钮下载程序到开发板上

拼装气象站

Step1

Waetherstep1.jpg

Step2

  • 结构-B1~B5结构-B6拼接在一起
Waetherstep2.jpg

Step3

Waetherstep3.jpg

Step4

Waetherstep4.jpg

Step5

Waetherstep5.jpg

Step6

  • 完成上述步骤后用结构-B0进行固定,之后插上USB线,气象站完成

Step7

  • 设置完成后就可以在Microduino-OLED/zh上看到各个传感器的数据
  • 同时在手机Blynk上也能看到气象站上传的数据
BlynkSetting13.png

注意事项

  • 确保Blynk验证码配置正确,可通过把验证码发送到邮箱,复制,粘贴确保一致性。
  • 确保家里的路由器运行正常,SSID和密码填写正确