风筝
发表于: 2017-4-13 17:05:03 | 显示全部楼层

FHX3K2XJ1CEMIVS.MEDIUM.jpg


本文主要介绍如何制作一个微型气象站。

这个想法和大部分代码来自Daniel Eichhorn在这个网址上的博客,可以去看看,这里面有一些很酷的东西!

http://blog.squix.ch/2015/12/esp8266-weather-station-new-version.html


我已经根据自己的应用更新/更改了部分代码,使得其适用于具有不同控制芯片(SH1106与SSD1306)的较大OLED。我还添加了一些新功能和改进。

1)该气象站从互联网获取数据,显示当前的天气和3天预报;

2)该装置可以切换显示另一个城市的数据 - 也许您的亲戚或朋友住在那里;

3)该装置具有传感器,可显示室内的温湿度;

4)程序将在10分钟左右内将系统置于深度睡眠状态,按下本机顶部的按钮即可唤醒。


步骤1:所需的材料

FYG8W7JIKZSAOBL.jpg

除了3D打印的房屋外,您还需要的两个主要部分是:

1)ESP8266-13 WIFI电路板

2)1.3“OLED(或者是更小的0.96”OLED)

另外还需要以下:

3)SHT22温湿度传感器

4)按钮

5)振动传感器

6)USB插座和5v至3.3V稳压器

7)一些10k电阻(我同时使用了贴片型和直插型)。


步骤2:OLED屏幕侧面说明

F9QXL10IL17PFSN.jpg

在过去的一年中,我已经对这些OLED屏幕进行了很多实验。虽然不是这个制作的一部分,但我会写下几个想法/发现:


OLED屏幕有各种形状和尺寸,但目前有两种非常受欢迎的屏幕尺寸。

1)0.96“

2)1.3“

他们也有2种常见的颜色

1)蓝色

2)白色


驱动OLED的芯片常用的有两种。这两种芯片有许多非常相似的设置命令(在大多数情况下相同),但用于显示信息的命令集是不同的,所以你不能只是改变屏幕 - 你需要更改程序/库来适合相应的芯片!

1)SH1106

2)SSD1306

我上传了两个版本的气象站软件,一个适用于SH1106芯片,另一个适用于SDD1306芯片。


芯片接收数据的方式可以是以下三种形式的一个:

1)二线制I2C

2)三线制SPI

4)四线制SPI

SPI相对于I2C的优势在于写入屏幕的速度更快,缺点是需要更多的GPIO引脚来驱动。在这个项目中,速度不是关注的问题,所以使用I2C容易得多。一些显示屏(如上图所示)可以配置为SPI或I2C。我已经做到了这一点,但是我强烈建议您使用只有I2C的显示屏,因为我花了许多很长时间移动smd电阻,尝试将显示屏作为SPI正常工作,然后也作为I2C正常工作。我确实可以让他们正常工作(在大多数情况下),但是花费了太长的时间。


步骤3:为ESP8266芯片添加10k上拉电阻

FQIL2K5IKZSAOCY.LARGE.jpg

FA6FS82J0SEM1P9.png

为了使ESP8266芯片正常工作,必须在电路板上添加多个上拉和下拉电阻。 第一步在GPIO15和GND之间添加一个10k贴片电阻。 我使用的是表贴电阻,因为它很好地适配在两个焊盘之间,但是它很适合附着,您可能更喜欢使用类似于以下步骤中使用的绕线电阻。

GPIO15拉低=正常启动,IE从芯片上的SPI闪存启动


步骤4:将上拉电阻添加到REST(复位引脚)

FE0RWGUIKZSAOFO.jpg

在此步骤中,我将一个10k上拉电阻从Vcc连接到RST引脚(复位引脚)。

这将使我们在将其设置成深度睡眠后重新唤醒ESP8266芯片。

如果你想省略这个功能,那么可以跳过这个步骤。


步骤5:向Cip使能引脚(Vcc-CH_PD)添加一个上拉电阻

FXZJLPDIKZSAOGK.jpg

将另一个10K线绕电阻从Vcc连接到CH_PD引脚,该引脚作为芯片使能。


步骤6:向GPIO 0(Vcc至GPIO 0)添加上拉电阻

F9M3444IKZSAOHF.jpg

将另一个10K线绕电阻从Vcc连接到GPIO 0引脚,该引脚正常工作时要求为高电平。


步骤7:将上拉电阻连接到GPIO 2(Vcc - GPIO 2)

FMGBNTWIKZSAOIB.jpg

将一个10k的绕线电阻从Vcc连接到GPIO 2引脚,该引脚正常工作时需要。


步骤8:开始添加接线

F4P1BPHIKZSAOJZ.jpg

现在开始增加一些连接线。 您需要最好的电线,因为长度都很短,不能承受太多的电流。

我使用的是多股线缆,这些电缆比较薄且灵活。 不要尝试使用厚实的电线,因为当将其全部装入非常小的房屋时会出现问题!


步骤9:开始增加电源线

F0HU6DRIKZSAOKU.jpg

在这里,我添加了+ ve和-ve电线到ESP8266(红色和黑色)上的Vcc和GND引脚。


步骤10:OLED线

F1L75U2IKZSAOKX.jpg

现在添加2条线,将信号传送到OLED(橙色和绿色)。连接的2个引脚是GPIO12(绿色)和GPIO13(橙色)


步骤11:添加一根线到GPIO 0

FSE5I7VIKZSAOLS.jpg

添加一根线到GPIO 0(蓝色)。正如您将看到的,这是编程ESP8266芯片所必需的。当您想要芯片在编程模式下启动时,GPIO 0引脚需要拉到地(LOW),但在正常操作时保持高电平。


步骤12:添加Rx和Tx线

FBBX6KCIKZSAOMO.jpg

在这里,我们需要在ESP8266上的Rx(棕色)和Tx(灰色)引脚上添加2根电线。这些是使用FTDI编程器的Rx和Tx进行编程和调试所需要的。

注意:电线需要交叉Tx到Rx和Rx到Tx


步骤13:添加连接到SHT22温湿度传感器(GPIO 14)

FCJZQZHIKZSAOMR.jpg

添加一根线(紫色)将SHT22温湿度传感器连接到GPIO 14。


步骤14:准备OLED屏幕

FS5TO0BIKZSAON3.jpg

在连接OLED液晶屏之前,请先修整焊接引脚的正面。这样可以确保在我们安装它们后不会与房屋进行通风。此外,您可以轻轻地将销钉倾斜,以便将安装放置在外壳中。

然后添加一个Vcc和GND线(红色和黑色)


步骤15:将OLED和ESP8266连接在一起

FZOHGRHIKZSAOPB.jpg

将橙色和绿色导线连接到OLED显示屏上的“Data”和“Clock”引脚。还可以将红色和黑色的电源线连接在一起。

引脚12连接到SDA

引脚13连接到SDC


SPI / I2C屏幕注意事项(6或7针)


如果您的屏幕不是专用的I2C,那么连接可能会被标记如下:

D0 ----------- SCL或CLK或SCK或Clock

D1 ----------- SDA或MOSI或Data

RES ---------- RST,RESET, Rest。将该引脚使用10k电阻上拉至Vcc- 同时建议将100nF电容连接到GND

DC ----------- A0数据/命令接地该引脚

CS -----------片选 - 将此引脚接地

VCC ---------- 3.3V

GND ---------- GND


步骤16:向振动传感器添加2根线

F2JCMLDIKZSAOPE.jpg

添加2根线(黄色)到振动传感器。另外还要添加一些热缩管到这个部分,因为要保证引脚是绝缘的。


步骤17:将振动传感器连接到GPIO 5

FI72B7LIKZSAOPF.jpg

将振动传感器的两条线连接到GND和GPIO 5。不管传感器的哪个腿都连接到哪个引脚,所有的振动传感器都会在GPIO 5引脚短路,因此它没有极性。

跳转到指定楼层
huaiqiao
发表于: 2017-4-14 09:23:27 | 显示全部楼层

感觉帖子没写完。。。。。。。
回复

使用道具 举报

风筝
发表于: 2017-4-14 14:57:33 | 显示全部楼层

步骤18:软件 - 请仔细阅读这些步骤!

F7KEU14J0SEM6DW.png

虽然这个不是一个基于Arduino的电路板,我们可以使用Arduino IDE来编程该芯片。

不要将组件装配在箱子中,我认为最好测试它,以确保一切正常运行。 在箱子外部排除设备故障要容易得多!


步骤19:软件 - A部分

F1VA9L6J08EN9DK.png

如果您从未使用过ESP8266,那么您将需要设置Arduino IDE第一次与这种类型的芯片的通讯。如果您已经使用过ESP8266完成项目,请跳到下一步:

1)打开Arduino IDE - 我使用的是版本1.8.1

2)导航到File > Preferences

3)在“Additional Boards Manager URLs:”文本框中插入以下链接:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

4)单击“OK”关闭对话框。

5)转到Tools > Board > Board Manager,然后单击此选项

6)在文本框中键入“ESP8266”,搜索,并显示一个选项“ESP8266 by ESP8266 Community"

7)点击“more info”,然后点击出现的“安装”按钮。

8)安装过程完成后(可能需要一分钟或2分钟),可以按“关闭”按钮关闭对话框

9)回到Tools > Boards,您应该在列表底部列出一些“新”的开发板。选择“Generic ESP8266 Module


步骤20:软件 - B部分

FXG8845J08ENBKI.png

第二步添加必要的库

此外,您还需要添加一些标准的Arduino库。


如果您已经做过以前的项目,你可能已经安装有这些库了,但我会列出他们在这里以防万一。可以使用以下步骤上传这些库:

1)从Arduino IDE单击Sketch > Include Libraries > Manage Libraries...

在弹出的窗口中,使用搜索框来查找以下库(这将使用您的Internet连接获取文件)。一个接一个地进行安装;

2)键入“DHT”库 - 当我下载IDE时已经安装该库了,但是您可能需要添加它;

3)现在键入“Ticker”库。该库允许调用定时器功能,并且已经安装在我的IDE中。

4)现在键入“ESP8266WiFi”,顾名思义,这是针对ESP8266的WiFi功能,并且我的Arduino IDE版本中已经安装了该库。

5)现在输入“json streaming parser” - 由Danny Eichorn设计,需要安装该库 - 单击安装按钮等待完成。


步骤21:软件 - C部分

F3PFZF1J0COTPTM.png

首先解压缩此步骤附带的文件(选中与屏幕芯片类型SH1106或SDD1306相匹配的文件)并打开.ino文件。有两个代码区域,您必须添加自己的个人数据。

1)您的家庭WIFI SSID和密码

在WeatherStationInstructable选项卡上找到这些代码行,并添加您自己的WIFI详细信息

  1. // 无线上网
  2. const char * WIFI_SSID =“你的SSID”;
  3. const char * WIFI_PWD =“你的密码”;
复制代码

2)您的天气密钥和城市,您想要的天气数据来自:

https://www.wunderground.com/

添加在你自己的个人天气密钥:

  1. // Wunderground设置
  2. const boolean IS_METRIC = true; const String WUNDERGRROUND_API_KEY =“你的WU api键”;
  3. String WUNDERGROUND_COUNTRY =“UK”; String WUNDERGROUND_CITY =“Leeds_Bradford”;
复制代码

注意 !!! - 如果城市中有一个空格,如Cape Town,使用下划线_替代:

  1. const String city1 =“Leeds_Bradford”;
  2. const String country1 =“UK”;
  3. const String city2 =“Sydney”;
  4. const String country2 =“AU”;
复制代码

现在保存更改并编译程序,以确保您没有错误。

WeatherStationInstructableSH1106.zip (46.38 KB, 下载次数: 227)

  

WeatherStationInstructableSSD1306.zip (46.33 KB, 下载次数: 267)


步骤22:软件 - D部分

现在加载程序到ESP8266:


对于此步骤,您将需要一个USB线和一个FTDI编程器(3.3v版本)和一些临时导线。

http://www.ebay.com.au/itm/like/142313799130?chn=ps


1)将FTDI的Tx和Rx连接至ESP8266芯片的Rx和Tx。 (Tx到Rx和Rx到Tx)

2)将FTDI的接地线连接到ESP8266

3)将USB导线连接到计算机的USB端口,等待它被识别。 然后在Arduino IDE中,进入Tools > Port:并选择FTDI的正确Com端口

4)下一部分有点棘手,因为您必须在将GPIO15接地来启动ESP8266,这样可以确保ESP8266以准备加载数据的模式下启动。

5)现在按Arduino IDE中的上传按钮,观察上传进度,大约需要1分钟。

上传后,ESP8266将自动重新启动,您应该有一个正常工作的装置!


步骤23:电源

FNCU7KYJ0X4Z5EF.jpg

如编程步骤所述,ESP8266芯片运行在3.3v。由于我想从USB为设备供电,我们需要将5VDC转换为3.3VDC。最简单的方法是使用3.3V固定稳压器。

我将稳压器连接到带有微型USB插座的PCB上,我设法将稳压器的3条腿放在PCB左侧的3个孔中。相对于稳压器,GND脚处于正确的孔中,但输入和输出电压脚需要做更多的工作。

1)将稳压器焊接到UBS电路板上,然后从USB 5V连接到稳压器上的输入电压脚(Vin)

2)切断PCB上的数据线。

3)我还在GND和输出之间加装了一个10uF钽电容,按照数据表中的推荐。

4)在稳压器的3.3v + ve输出端加上一根红线,这是稳压器的中间引脚,但稳压器背面的接头也是输出端,所以我把红线焊在那里,因为它更容易!

5)将黑线连接到调节器的GND -ve端子。

6)测试输出是否是3.3v!


步骤24:3D打印盒

以下是3D打印盒的2个文件(1.3寸液晶屏)

打印完成后,我在顶部钻了一个孔用于按钮,然后用湿布和干砂纸(300粒度)擦拭外面,然后使用Dulux“Duramax”快干喷漆对盒子进行喷涂。

https://www.bunnings.com.au/dulux-duramax-340g-gloss-antique-white-usa-spray-paint_p1400692

OLED FRAME BACK.STL (28.21 KB, 下载次数: 52)

  

oled_frame.STL (157.99 KB, 下载次数: 53)

回复

使用道具 举报

风筝
发表于: 2017-4-14 16:30:04 | 显示全部楼层

步骤25:将屏幕装入外壳

FH7YO5IIL2C5UAB.jpg

首先确保您的液晶屏装入外壳。 虽然屏幕尺寸可能相同,但您可能需要更换外壳内部以适应屏幕PCB的变化。 一些PCB有椭圆形孔,而其他PCB有圆形孔。

一旦你确定屏幕整齐地装入了外壳,可以使用胶水将其固定位置。 要做到这一点,您可以使用超级胶、热胶或者是我喜欢使用的5分钟两部分的环氧树脂胶。

两部分的环氧树脂胶 - 5分钟固化



步骤26:添加两根导线到按键开关

FPZW92RIL17PFJL.jpg

添加两根导线到按键开关,与振动传感器一样,导线可以是相同的颜色,因为连接是非极性的。

可选项 - 如果您不希望气象站进入睡眠状态(因此省略此复位按钮),则可以注释掉这部分代码:

  1. // Shutdown and go to sleep function
  2.   
  3.   timerSleep = millis();
  4.   if (timerSleep >= 10*60000 && ui.getUiState().frameState == FIXED){ // after 2 minutes go to sleep
  5.     drawSleep(&display);
  6.         // go to deepsleep for xx minutes or 0 = permanently
  7.         ESP.deepSleep(0,  WAKE_RF_DEFAULT);                       // 0 delay = permanently to sleep
  8.         delay(1000);                                              // delay to allow the ESP to go to sleep.
  9.   }
复制代码

步骤27:将开关装入外壳

FJMP1V2J0X4Z2C0.LARGE.jpg

F2ZQJIRJ0X4Z2CH.LARGE.jpg

现在预接线的开关可以组装到外壳中,并连接到ESP8266电路板。

一个连接到GND,另一个连接到RST引脚。 这个也是非极性的,所以任何一根导线都可以任何一个连接。


步骤28:将按键开关连接到ESP8266

FO228GZJ0X4Z2EL.LARGE.jpg

现在我们需要将按键开关连接到ESP8266。 该按钮使ESP8266从深度睡眠中唤醒,通过RST引脚接地来实现。该按钮的2根电线需要连接到GND线和RST引脚之间。

回复

使用道具 举报

风筝
发表于: 2017-4-18 13:59:53 | 显示全部楼层

步骤29:准备后面板


F9KD709IL2C5UA7.jpg


准备后面板有3个主要步骤。

1)为温度/湿度传感器钻3个小孔(我剪掉了NC引脚)。将传感器粘贴到背面。我使用的是5分钟快干的环氧树脂。

2)使用环氧树脂安装上一步中制作的电源,将其固定在后面板内侧的凸缘上。确保USB连接器通过孔中心!

3)向SHT22传感器添加导线。我们需要连接VCC和GND。 SHT22传感器工作在3.3到6V。


步骤30:将后面板连接到ESP8266

FQD5B60J0X4Z2E5.LARGE.jpg

我们现在可以连接在上一步中预先组装的后面板。

1)将3.3V和+ ve(红色)导线线绞合在一起

2)将GND和-ve(黑色)导线绞合在一起

3)焊接SHT22传感器的数据线(黄色)

4)在裸露的3.3v和GND接头处放置一些热缩管


步骤31:将后面板安装到位

F9MR28NJ0X4Z2HH.LARGE.jpg

首先,将一些绝缘胶带放在暴露的端子上,以及ESP8266板的顶部和底部附近,我们有一些“老鼠窝”似的电线,当我们将它们装入外壳时,我们不希望它们短路。现在仔细地将电线进入小外壳,同时将后面板安装在适当的位置。


步骤32:上电开机!

任何稳压5V电源都可以 - 该器件需要小于100mA的电流。您可以将其连接到您的计算机或电源插头。

该装置会应该启动,连接到家庭WiFi,然后显示天气。

恭喜您现在完成了!

回复

使用道具 举报

hhz1468255512
发表于: 2017-5-16 17:27:19 | 显示全部楼层

那个获取天气的地方是不是要在那个网址注册购买才能用
回复

使用道具 举报

天南地北客
发表于: 2017-5-17 09:28:41 | 显示全部楼层

hhz1468255512 发表于 2017-5-16 17:27
那个获取天气的地方是不是要在那个网址注册购买才能用

需要在wunderground官网上面进行注册,登陆后选择购买。可以使用STRATUS PLAN模式,0元购买。

填写项目信息后,就可以得到相关的KEY。
0.jpg
回复

使用道具 举报

hhz1468255512
发表于: 2017-6-11 18:33:03 | 显示全部楼层

。。。。。。。。。。。。。。。

本帖最后由 hhz1468255512 于 2017-6-11 20:24 编辑

  。。。。。。。。。。。。。。。。。。。。。
回复

使用道具 举报

hhz1468255512
发表于: 2017-6-11 18:42:32 | 显示全部楼层

天南地北客 发表于 2017-5-17 09:28
需要在wunderground官网上面进行注册,登陆后选择购买。可以使用STRATUS PLAN模式,0元购买。

填写项目 ...


那个,你好,我在哪个网站注册完进api填写完信息后按钮链接都没反应,用了俩手机也是没反应 我留个我的联系方式,qq 1468255512,想向您请教一些问题,您图片上的api  key   我们能用吗 183152t8syib229oyhpkgh.png
回复

使用道具 举报

天南地北客
发表于: 2017-6-11 21:30:59 | 显示全部楼层

hhz1468255512 发表于 2017-6-11 18:42
那个,你好,我在哪个网站注册完进api填写完信息后按钮链接都没反应,用了俩手机也是没反应 我留个我的 ...

应该也是可以直接使用的

申请api的步骤可以参看官网的介绍,或者查看另一个帖子:https://www.yiboard.com/thread-716-1-1.html,介绍的会比较详细些。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-21 17:09 , Processed in 0.058911 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表