查看“开源WiFi气象站系统/zh”的源代码
←
开源WiFi气象站系统/zh
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
{| style="width: 840px;" |- | ==概述== *项目名称:开源WiFi气象站系统 *目的:获取身边实时的温度、湿度、光照甚至pm2.5数据 *难度:中 *耗时:5小时 *制作者: *简介: 它能够获取你身边实时的温度、湿度、光照甚至pm2.5数据,并且在屏幕上显示出来,如果你需要,甚至可以将其接入互联网,只要有一台能上网的手机或者计算机,任何地方、任何时候都能查看到这些数据。而这套系统完全由Microduino来实现,非常简单。 ==材料清单== *Microduino设备 {|class="wikitable" |- |模块||数量||功能 |- |[[Microduino-Core+/zh]]||1||核心板 |- |[[Microduino-USBTTL/zh]] ||1||下载程序 |- |[[Microduino-WiFi/zh]] ||1||连接网络 |- |[[Microduino-Temp&Hum/zh]] ||1||数字温湿度传感器 |- |[[Microduino-Air quality/zh]] ||1||空气质量传感器 |- |[[Microduino-Light/zh]] ||1||光照传感器 |- |[[Microduino-OLED/zh]] ||1||显示 |} *其他设备 {|class="wikitable" |- |模块||数量||功能 |- |Micro-USB线||1||下载程序、供电 |- |[[Microduino-USBTTL/zh]] ||1||下载程序 |- |GP2Y1010AU0F ||1||pm2.5传感器 |- |螺丝 ||7||固定模块 |- |螺丝刀 ||1||固定螺丝 |- |外壳 ||1|| |} [[File:气象站物料.jpg||1000px|center]] ==实验原理== 气象站专用板上安装了多参数传感器,包括数字温湿度传感器(Microduino-Tem&Hum)、光照强度传感器(Microduino-Light)、空气质量传感器(Microduino-Air)和pm2.5传感器(GP2Y1010AU0F)。每个传感器均与Microduino-Sensorhub连接,由Microduino核心(Microduino Core+)对传感器数据分析处理,以直观的文字提示方式在OLED中显示。同时通过Microduino CC3000模块(wifi)使Microduino核心连接到网络,与mCotton物联网平台通讯并以直观的文字和图表信息反馈给用户,用户只需要用通过能上网的手机或者计算机,在任何地方任何时候都能查看到这些数据,用户甚至可以设置传感器值来触发微博,与大家一起分享你的生活。 总的来说,用户通过气象站可以随时随地感受的身边环境的变化,把无形变有形,去感受大自然的瞬息万变。 [[File:Wifistationtheory.jpg||600px|center]] 本系统由传感器、协调器、网络适配器、OLED显示器、mCotton物联网平台五个部分组成,综合了传感技术、网络通信技术、OLED显示技术和物联网技术。传感器主要完成温度、湿度、光照参数、空气质量的采集,协调器分析处理采集的数据,同时通过网络适配器连接到网络与mCotton物联网平台通信,从而可以在mCotton物联网平台下查看到这些数据。 [[File:Wifistationtheory1.jpg||600px|center]] *管理平台构成 管理平台大致可分为两个部分:一是Microduino核心控制,负责采集传感器数据,并且连接到互联网。二是mCotton物联网平台,负责将数据以曲线形式直观显示给用户,用户可以随时随地查看,并且可以设置微博触发,分享你的生活环境。如图2-2所示: *主要传感器 [[File:Wifistationtheory2.jpg||600px|center]] 下图展示了本系统的处理流程。数据采集系统:主要负责对环境温度、湿度、光照强度等数据的采集。传感器采集的数据上传到Microduino核心,具有扩展方便等优点。 无线传输系统:该系统主要将设备采集到的数据,通过无线网络传送到服务器上,使用WiFi传输数据。 数据处理系统:该系统负责对采集的数据进行上传存储、直观显示,用户可随时随地通过电脑和手机等终端进行查询。 [[File:Wifistationtheory3.jpg||600px|center]] ==文档== 气象站代码:【'''[[media:Weather v2.rar|气象代码]]'''】 本地版气象站代码:【'''[[Media:Weather_v2_new.rar|本地气象代码]]'''】 气象站代码Github:[https://github.com/Microduino/CC3000WeatherStation Weather_Station] ==调试过程== *搭建服务器 气象站既然要连入互联网,一个用来储存和显示的服务器必不可少,首先我们需要搭建好一个网络服务器。 *关于mCotton 目前定位于做一个开放的通用物联网平台,主要提供传感器数据的接入,存储和展现服务,为所有的开源软硬件爱好者、制造型企业,提供一个物联网项目的平台, 使得硬件和制造业者能够在不关心服务器实现细节和运维的情况下,拥有交付物联网化的电子产品的能力。 我们只需在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"> //1,屏幕显示部分============================= #include"Arduino.h" #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> *用户配置部分 def.h <source lang="cpp"> #define WLAN_SSID "AZURE" //WIFI网络名 #define WLAN_PASS "azure001" //WIFI密码 #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> *OLED显示部分 <source lang="cpp"> U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); //设置OLED型号 //-------字体设置,大、中、小 #define setFont_L u8g.setFont(u8g_font_7x13) #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() ); } //显示函数 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); setFont_M; //设置字体为大 u8g.setPrintPos(20, 16); //设置文字开始坐标 u8g.print("`C "); setFont_L; //设置字体为大 u8g.setPrintPos(20, 32); //设置文字开始坐标 u8g.print(temp , 1); //温度 setFont_M; //设置字体为大 u8g.setPrintPos(100, 16); //设置文字开始坐标 u8g.print("%"); setFont_L; //设置字体为大 u8g.setPrintPos(100, 32); //设置文字开始坐标 u8g.print(humi , 0); //湿度 setFont_L; //设置字体 u8g.setPrintPos(4, 49); //设置文字开始坐标 u8g.print(light , 0); //光照强度 setFont_M; //设置字体 u8g.print(" Lux"); setFont_L; //设置字体 u8g.setPrintPos(4, 63); //设置文字开始坐标 u8g.print(pm25 , 1); //光照强度 setFont_M; //设置字体 u8g.print(" ug/m3"); setFont_L; //设置字体 u8g.setPrintPos(80, 49); //设置文字开始坐标 u8g.print(etoh , 0); //光照强度 setFont_M; //设置字体 u8g.print(" ppm"); setFont_M; //设置字体为大 u8g.setPrintPos(80, 63); //设置文字开始坐标 u8g.print(" LED:"); } while( u8g.nextPage() ); } void volcdsetup(char* zi,unsigned int x,unsigned int y) { //#ifdef OLED u8g.firstPage(); 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> ==视频== |}
返回至
开源WiFi气象站系统/zh
。
导航菜单
个人工具
创建账户
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
Welcome
首页
创客大赛
大赛详情
3D打印
安装月球车
图形化编程
操控月球车
升级月球车
编程工具下载
软件下载
Arduino
Processing
Mixly
Scratch
模块套件
Microduino 102
mCookie 102
mCookie 202
mCookie 302
IBC
其他
应用套件
四轴飞行器
平衡车
小车CUBE
音乐播放器
刷卡音乐播放器
wifi气象站
彩虹音乐触摸灯
分贝检测仪
迎门汇报
LED点阵时钟
LED点阵屏幕
硬件
mCookie
Sensor
Microduino
MicroWrt
MicroNux
MicroRobot-Core
MicroRobot-CoreESP
ideaBoard
ideaBox
MicroMV
MicroAI
帮助
常见问题
帮助
工具
链入页面
相关更改
特殊页面
页面信息