个人气象站(Arduino+ ESP8266 + Thingspeak)
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 5 | ||||
| × | 1 |
必要的工具和机器
| ||||
| ||||
| ||||
| ||||
|
应用和在线服务
| ||||
|
关于这个项目
简介:制作个人气象站
坐在房间里,你开始出汗或感到寒冷;你想知道你房间里的温度是多少?或者湿度是多少?这发生在我身上。
这导致了个人气象站的诞生,它监控您房间的温度、湿度、压力和光照强度,并将其上传到 thingspeak.com 上的私人频道。
让我们开始吧。
第 1 步:快速视频
这是一个小视频,它在 5 分钟内总结了所有事情。
点击此处在 youtube 上观看。
第 2 步:个人气象站所需的电子元件
说明: 我们将使用 DHT11 来感测湿度,使用 BMP180 来感测温度和压力,并使用光敏电阻 (LDR) 来大致了解光强度。 Arduino nano 将从这些传感器收集数据并将其发送到 ESP8266,以便将其上传到 thingspeak.com 上的私人频道。我们将通过 12V-2A 壁式适配器为 Arduino nano 供电,传感器和 ESP8266 将从基于 LM2596 的降压转换器接收下转换电压。
组件列表:
- BMP180 压力和温度传感器,
- DHT11 湿度传感器,
- 光敏电阻 (LDR),
- ESP8266 wifi 模块(固件就绪),
- Arduino nano,
- 2 个电阻器 - 51 KΩ 和 4.7 KΩ,
- LM2596 降压转换器,
- 直流插孔,
- 切换和
- 12V-2A 墙上适配器。
第 3 步:个人气象站所需的工具和额外物品
说明: 我们将使用剥线钳剥线,锉刀平滑外壳上的切口/孔,胶枪用于将组件放置在外壳内,螺丝刀关闭外壳盖,并使用焊锡线烙铁在通用电路板(GCB)上组装电路. 4x4x2 英寸塑料盒用作外壳。我们还需要公母贝格条以及母连接器,以便在 GCB 上正确组装。
工具列表:
- 剥线钳,
- 文件,
- 胶枪,
- 螺丝刀和
- 烙铁和焊锡丝。
额外项目列表:
- 4x4x2 英寸塑料盒(我用过这个尺寸,附近的任何尺寸都可以),
- 通用电路板,
- 男性和女性伯格带和
- 母接头。
第 4 步:软件要求
描述:为了看到传感器数据的价值,我们需要在 thingspeak.com 上有一个私人频道。我们将需要 Arduino IDE 来为 arduino nano 编写 arduino 代码。 (我假设你们拥有个人电脑/笔记本电脑和可以访问互联网的 wifi 路由)
软件要求列表:
- Thingspeak.com 上的私人频道和
- Arduino IDE(最好是最新版本)。
您可以从 arduino.cc 下载最新版本的 Arduino IDE。现在让我们在 thingspeak.com 上创建一个私人频道。
第 5 步:在 Thingspeak.com 上创建私人频道
要在 thingspeak.com 上创建私人频道,请按以下步骤操作:
- 打开您的网络浏览器并转到 thingspeak.com 并点击右上角的“注册”选项卡,(图 1)
- 填写详细信息并点击“创建帐户”,(图片编号 2)
- 现在点击“新频道”标签,(图片编号 3)
- 再次填写频道的详细信息并启用 4 个字段(因为我们将发送 4 个传感器值),向下滚动并单击“保存频道”选项卡,(图片编号 4/5)
- 在此页面上,单击“API 密钥”选项卡并记下您的“写入 API 密钥”。
就是这样,现在您拥有了自己的私人 ThingSpeak 频道。
现在让我们把所有的电子元件放在一起。
第 6 步:个人气象站示意图
在这里,我附上了个人气象站的示意图。我也为此附上了fritzing文件。连接相当简单。
- BMP180 连接到 arduino nano 的 I2C 端口。
- LDR 与 51 KOhm 电阻器以分压器方式连接,结点连接到 arduino nano 的 A1 引脚。
- DHT11 的数据引脚被 4.7 KOhm 电阻拉高并连接到 arduino nano 的 A0 引脚。
- ESP8266 的 TX 和 RX 分别连接到 arduino nano 的 D10 和 D11。 ESP8266 的 CH_PD 连接到 3.3V 电源轨。
- 通过打开该模块上的电位器将 LM2596 模块的输出调整为 3.3V。将该模块的输出分别连接到 BMP180、DHT11、LDR 的 Vcc 和 Gnd 以及 ESP8266 的 Vcc 和 Gnd。
- LM2596 模块的输入来自 12V-2A 墙上适配器,该适配器还连接到 Arduino nano 的 Vin 和 Gnd。
我们需要在通用电路板上组装这个电路。让我们这样做。
第 7 步:在通用电路板 (GCB) 上组装电路
步骤 3 中的硬件工具和额外物品现已投入使用。
- 对 Arduino nano 和 ESP8288 在 GCB 上的放置使用女性 berg 条,
- 使用烙铁和焊锡丝将它们电气连接到电路板上,
- 使用母连接器来扩展所有传感器和 LM2596 模块的覆盖范围,因为它们会粘在外壳的盖子和壁上,
- 使用凸形条为上面制作的凹形延伸件制作连接点,
- 使用电线(使用剥线钳将它们剥离)或熔化的焊锡线导轨在 GCB 上实现电路原理图,最后,
- 在使用万用表为电路供电之前检查排序。
现在所有的硬件都放在了 GCB 上,让我们看一下代码。
第 8 步:编码
个人气象站的代码相当简单。为了便于移植,我已经正确地注释了代码。 在刻录代码之前,请注意以下事项。
- 确保已安装所有库,
- 将代码第 14 行中的连字符替换为您的接入点(wifi 路由器)的 SSID,
- 将代码第 15 行中的连字符替换为您的 wifi 网络的密码,
- 将第 17 行中的连字符替换为您的 ThingSpeak 私人频道写入 API 密钥,
- 在对 Arduino nano 进行编程时,请确保您的 12V 直流电源处于关闭状态。
这是 github(个人气象站)的链接,用于下载我使用的代码和库。
现在我们的硬件和软件都准备好了,剩下的就是打包了。
第 9 步:外壳准备
现在我们需要在 4x4x2 英寸的盒子上打出各种形状和大小的孔。我们需要为 DC 插孔打孔并打开任何首选的外壳壁。我们还需要在外壳的盖子上为传感器打孔。
我附上了一张图片,显示了我们需要在外壳上制作的孔的尺寸。
使用热刀片切开塑料。
使用锉刀平滑孔。
图> 图> 图>现在您的机箱已准备好托管您的电路。
第 10 步:盖上盖子
将组装好的 GCB 放入外壳内。
将开关和直流插孔放在墙上的孔中;盖子孔上的传感器。确定它们的位置并使用胶枪固定它们。最后用螺丝刀关闭盖子。
你有它,你的个人气象站。打开电源,通过您的 ThingSpeak 私人频道上的智能手机/PC/笔记本电脑/平板电脑,从世界任何地方查看您房间的温度、湿度、压力和光照强度。
这就是这个项目的全部内容。如有任何疑问,请发表评论。谢谢阅读。
代码
- 代码
代码Arduino
#include#include #include #include #define DEBUG 0 // 将值更改为 1 以启用使用串行监视器的调试 #define dht_pin A0 // 为 DHT 传感器定义引脚 A0#define lightSensor A1 // 将引脚 A1 定义为 LDR 分压器的输入引脚 DHT;Adafruit_BMP085 bmp;SoftwareSerial esp8266Module(10, 11); // RX, TXString 网络 ="----"; // 您的接入点 SSIDString 密码 ="------------"; // 你的wifi接入点密码#define IP "184.106.153.149" // thingspeak.com的IP地址String GET ="GET /update?key=----------------"; // 替换为您的频道 keyvoid setup(){ if(DEBUG){ Serial.begin(9600); // 设置硬件串口波特率为 9600 } esp8266Module.begin(9600); // 将软串行波特率设置为 9600 if (!bmp.begin()) { if(DEBUG){ Serial.println("找不到有效的 BMP085 传感器,请检查接线!"); } while (1) {} } delay(2000);}void loop() { setupEsp8266(); DHT.read11(dht_pin);双 humi =DHT.湿度;双 bmp_temp =bmp.readTemperature();双 bmp_pressure =bmp.readPressure(); int lightIntensity =analogRead(lightSensor); updateTemp(String(bmp_temp),String(lightIntensity),String(bmp_pressure),String(humi));延迟(30000);}//------------------------------------------- -------------------------//以下功能设置esp8266,将其放入station made并//连接到wifi接入点。//- -------------------------------------------------- ---------------void setupEsp8266() { if(DEBUG){ Serial.println("Reseting esp8266"); esp8266Module.flush(); esp8266Module.println(F("AT+RST"));延迟(7000); if (esp8266Module.find("OK")) { if(DEBUG){ Serial.println("Found OK"); Serial.println("更改espmode"); esp8266Module.flush();改变模式();延迟(5000); esp8266Module.flush();连接到WiFi(); } else { if(DEBUG){ Serial.println("OK 未找到"); } }}//-------------------------------------------- ----------------------// 以下函数将 esp8266 设置为站模式//----------------- -------------------------------------------------- bool changesMode(){ esp8266Module.println(F("AT+CWMODE=1")); if (esp8266Module.find("OK")) { if(DEBUG){ Serial.println("模式改变");返回真; } else if(esp8266Module.find("NO CHANGE")){ if(DEBUG){ Serial.println("Already in mode 1");返回真; } else { if(DEBUG){ Serial.println("更改模式时出错");返回假; }}//---------------------------------------------- ---------------------// 以下函数将esp8266连接到wifi接入点//----------------- -------------------------------------------------- bool connectToWiFi(){ if(DEBUG){ Serial.println("inside connectToWiFi"); } String cmd =F("AT+CWJAP=\""); cmd +=网络; cmd +=F("\",\""); cmd +=密码; cmd +=F("\""); esp8266Module.println(cmd);延迟(15000); if (esp8266Module.find("OK")) { if(DEBUG){ Serial.println("Connected to Access Point");返回真; } else { if(DEBUG){ Serial.println("无法连接到接入点");返回假; }}//---------------------------------------------- ---------------------// 以下函数将传感器数据发送到thingspeak.com//---------------- -------------------------------------------------- -void updateTemp(String voltage1,String voltage2,String voltage3,String voltage4){ String cmd ="AT+CIPSTART=\"TCP\",\""; cmd +=IP; cmd +="\",80"; esp8266Module.println(cmd);延迟(5000); if(esp8266Module.find("Error")){ if(DEBUG){ Serial.println("发送时出错"); } 返回; } cmd =GET +“&field1=”+电压1+“&field2=”+电压2+“&field3=”+电压3+“&field4=”+电压4+“\r\n”; esp8266Module.print("AT+CIPSEND="); esp8266Module.println(cmd.length());延迟(15000); if(esp8266Module.find(">")) { esp8266Module.print(cmd); if(DEBUG){ Serial.println("数据发送"); } }else { esp8266Module.println("AT+CIPCLOSE"); if(DEBUG){ Serial.println("连接关闭"); } }}
个人气象站的库和代码
查看自述文件https://github.com/jayraj4021/Personal-Weather-Station-14示意图
原理图.fzz制造工艺