Arduino上的气象站,从A到Z。第2部分

待续。 上一部分


目录:



柔软的 元件选择



硬件和软件的选择紧密相关,就像“鸡和蛋”一样。 从哪里开始,从硬件到软件? 如果您具有良好的硬件,但没有驱动程序,库和软件(IDE,固件实用程序等),则它是无用的,反之亦然。


因此,我再次告诉您有关nRF24L01 +和ESP8266之间的选择,用于将远程传感器连接到中央单元。


事实是,ESP8266不仅是一个愚蠢的WiFi适配器,而且在板上具有一个微控制器,其电源和存储容量均优于 Arduino。 默认情况下,ESP8266带有一组AT命令形式的固件,在这种情况下,ESP用作简单的调制解调器。 但是还有更高级的固件,这里ESP8266甚至可以充当Web服务器,当然还可以控制诸如Arduino之类的传感器。


但是,所有这些高级固件都有一些缺点,这些缺点不允许(总之我已经写过一些铁的问题)在此项目中使用ESP8266:


  • 所有固件仍非常​​原始(截至2016年)
  • 有些准备不免费
  • 调试和更改的入门门槛比Arduino高得多。

结果,我找不到现成的合适的高级固件,并且还没有创建自己的固件。 ESP8266芯片是一个广泛而有趣的话题。


反过来,标准AT固件也有缺点:


  • 它们仍然潮湿(截至2016年)
  • 我找不到用于使用AT命令控制ESP8266模块的Arduino常规库,我不得不自己“集体农场”。

另一方面,nRF24L01 +无线电模块简单明了;有一个超级RadioHead可以使用它,并且没有编程问题 。 该库有据可查,非常重要。


RadioHead允许您传输数据结构(而不​​仅仅是单个数字),这是在该项目中实现的。 展望未来,我要说的是RadioHead可以可靠地传输数据,如果不是第一次也可以重复传输。 图书馆负责所有这些事情。


为了节省能源,我使用了低功耗库 ,它很简单,仅包含您需要的内容。


这是一段代码:


//    2.402 GHz ( 2), 2Mbps, 0dBm rfdata.init(); //     ( ,  ) rfdata.sendtoWait((uint8_t*)&dhtData, sizeof(dhtData), SERVER_ADDRESS); //  LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);` 

仅此而已!


如果在窗下传感器中使用ESP8266,我将不得不创建一个WiFi接入点并以某种方式传输数据(固件在哪里,软件在哪里?)。 或者让传感器直接将数据发送到Web服务器,然后中央单元(在这种情况下,它不再扮演“中央”角色)学会从那里读取数据以将其显示在记分板上。


换句话说,我从WiFi Internet和PHP + MySQL服务器走了更大的自主权。 您可以立即铆接气象站,而无需访问Internet和/或托管服务器,在这种情况下,您不需要ESP8266,只需稍后添加即可。


为了从DHT等传感器读取数据,有一个Adafruit DHT传感器库 。 使用它很简单明了。


需要Adafruit Sensor抽象级别库的Adafruit BMP085 Unified库适用于压力传感器


所有库都有草图示例。


从理论上讲,这可能就是全部。 “我们的目标很明确,任务已经定义。 同志们,为了工作!


中央单元。 铁


好了,最后,经过了所有的骚动,我们开始组装!


注意事项 如果您从未收集过气象站(哦,好吧!),那么无需手头所有细节即可开始。 例如,您可以在没有无线电模块和/或ESP8266的情况下启动。 BMP180气压传感器也可能丢失。 稍后添加。 的确,在这种情况下,您将必须在草图中独立注释掉代码中与缺少的块进行交互的那些部分,但这并不是那么困难。 我将展示如何。


最主要的是,至少已经收集并获得了一些东西,然后继续下去会更有趣。


如前所述,中央单元基于Arduino MEGA。 我们还需要:


  • 温湿度传感器DHT11
  • 气压传感器BMP180
  • WiFi模块ESP8266
  • 2.4 GHz nRF24无线电模块
  • LCD1604型显示器(4行,每行16个字符),可以用$ 5购买
  • 具有5-12 V DC输出的电源(我使用带USB输出的手机充电,这很方便)
  • 用于焊接的面包板,烙铁,松香,焊料或常规的无焊料arduino面包板。 就我个人而言,我努力确保可靠性,因为该项目显然是一项历时很长的项目,并且不希望因不小心将线路从面包板上拔出而遭受损失。

您可以从1美元购买用于拆焊的开发板。 取较大的尺寸,足以容纳所有连接。 再说一次:购买前,请阅读说明,而不是图片。


可以从2美元购买免焊费。 取较大的尺寸,足以容纳所有连接。


连接线是我们需要的类型:


  • 杜邦电缆的“父亲-母亲”(也有“父亲-父亲”,“母亲-母亲”)。 这是由几根具有不同绝缘颜色的电线和用于Arduino引脚接触的连接器制成的电缆。 使用这些电线,可以方便地将开发板和传感器直接连接到Arduino,而无需使用面包板。
  • Arduino的无焊面包板的常规连接线。
  • 一束用于焊接的电线。

第一步是焊接LCD-1604。 首先,我将引脚焊接到板上,然后将连接器焊接到面包板上。



从下面查看。



我没有预接线就焊接在直觉上,因此这里不提供电路。 这样做会更方便,但不会更糟。 坚持以下原则:黑线始终是大地,红色是电源的“正”,其余颜色将起作用。 原来是这样的。




为了不忘记连接器在哪里,他用白色校正剂“画”了隔壁板上的部分,并做了相应的题词。 丑吗 但是实用且快速,这是一个原型!



引脚和连接


显示屏16×4 LCD1604


有关显示器及其使用方法的更多信息,请谷歌“使用基于HD44780的字符LCD”。 请注意,您需要仔细考虑LCD指示器电源的极性,并且电源电压的范围为+ 4.5 ... 5.5V。如果疏忽大意,可能会导致指示器故障!


针LCD 1604Arduino的巨型Arduino Uno内容描述
VS地线地线地线
Vdd5伏5伏4.7-5.3V
RS224高电平表示DB0-DB7输出的信号是数据,低电平表示命令
w地线地线确定数据的方向(读/写)。 由于通常不要求从指示器读取数据的操作,因此有可能在此输入上持续设置低电平
Ë235此引脚上持续时间至少为500 ms的脉冲决定了从DB0-DB7,RS和WR引脚读取/写入数据的信号
DB4248传入/传出数据
DB5259
DB62610
DB72711
LED A ++ 5V或220欧姆电阻→+ 5VLED-A
LED B-地线
V0GND或10kΩ微调

软件初始化将如下所示:


 // Arduino MEGA LiquidCrystal lcd(22, 23, 24, 25, 26, 27); // Arduino UNO LiquidCrystal lcd(4, 5, 8, 9, 10, 11); 

温度,湿度DHT11


连接DHT11温湿度传感器(SainSmart)。 将传感器正面朝上放置,导线将从左至右进行描述。


DHT11Arduino的兆
数据数字引脚2(PWM)(请参阅下面的DHTPIN)
Vcc3.3-5 V(建议5 V;更好的外部电源)
地线地线

软件初始化


 #define DHTPIN 2 //   Digital pin 2 (PWM) #define DHTTYPE DHT11 // . DHT.h //  DHT dht(DHTPIN, DHTTYPE); 

气压计BMP180


通过I2C / TWI接口连接大气压传感器BMP180(气压计)+温度。


BMP180Arduino的兆
Vcc未连接
地线地线
SCL21(SCL)
SDA20(SDA)
3.33.3伏

对于UNO:A4(SDA),A5(SCL)。


 //  Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085); // sensorID 

nRF24L01 +


简要特征:


  • 频率范围2.401-2.4835 GHz
  • 126个频道。 零通道开始于2400 MHz,然后以1 MHz为步长,例如,通道70分别位于2470 MHz。 将传输速度设置为2Mbps时,通道宽度为2 MHz
  • 电源1.9-3.6 V(建议3.3 V)

这是模块的引脚。


引脚排列nRF2401L +


有人建议立即将100nF陶瓷电容器(可能为1µF,可能为10µF)焊接到RF电源引线上,以避免产生电子噪声。


引脚nRF24L01 +(在芯片所在板的顶部,引脚应在底部):


引脚2 3.3V引脚4 CSN引脚6 MOSI引脚8 IRQ
引脚1 GND针脚3 CE引脚5 SCK7 MISO

气象站的连接:


Arduino的兆nRF24L01 +
3.3伏VCC引脚2(更好的外部电源)
针脚D8CE引脚3(启用芯片)
SS针D53CSN引脚4(片选输入)
SCK引脚D52SCK引脚5(SPI时钟输入)
MOSI引脚D51SDI引脚6(SPI数据输入)
MISO针D50SDO引脚7(SPI数据输出)
未连接IRQ引脚8(中断输出)
地线GND引脚1(接地)

无线电模块的编程将在软件部分中详细描述。


ESP8266


ESP8266引脚(在电路板的顶部,芯片应在底部):


地线GPIO2GPIO0接收
得克萨斯州CH_PD重设Vcc

为气象站连接ESP8266:


ESP8266Arduino的兆
得克萨斯州10针(软件串行RX)
接收11针(软件串行TX)
Vcc3.3伏
地线地线
CH_PD通过10K电阻到3.3V Arduino
GPI0选配 通过10K电阻到3.3V Arduino
GPI2选配 通过10K电阻到3.3V Arduino

KDPV


中央单元组装。 我从鞋子下面从纸板箱中切出“主板”,然后用3颗螺钉将其余的螺钉固定在上面。


中央单元组装


如您所见,在这里所有食物都是由Arduino引脚提供的,即 没有任何东西直接进入电源,到目前为止,已经有足够的功率。


像一切。 我什么都没忘记。


焊接,连接。 在下一部分中,将给出中央单元的工作草图,而我们的气象站将已经显示了一些内容。


Source: https://habr.com/ru/post/zh-CN425927/


All Articles