认识Arduino杀手:: ESP8266

对于任何物联网(IoT)DIY项目,Wi-Fi都是必不可少的工具包,但是我们最喜欢的Arduino并未随附Wi-Fi,而添加Wi-Fi防护罩可将总成本降低至40美元左右。如果我告诉您有一个兼容Arduino的开发板,且内置Wi-Fi的价格不到10美元怎么办?嗯,有。

遇到了Arduino杀手:: ESP8266。将皇冠从我们亲爱的Arduino开发板的光亮的头上偷走只是时间问题。

除了俗称的ESP8266(也称为NodeMCU),最初是作为Arduino板的低成本Wi-Fi附加件销售的,直到黑客社区意识到您可以完全摆脱Arduino的困扰。

在不到一年的时间里,ESP8266迅速普及,现在得到了很好的支持和开发,如果您当前使用的是Arduino ,您需要站起来记笔记。立即购买,然后按照本指南开始进行ESP8266编程-全部从熟悉的Arduino IDE中进行。

您当然不限于使用Arduino IDE,它们与兼容Lua也是如此(对我的新手来说,这看起来像是精简的Python),但是由于我们是从那些已经在Arduino上学到的人的角度解决这个问题的,所以今天我们将专门介绍它。

现在有很多ESP8266型号,但我将继续推荐该型号:ESP-12E(也称为NodeMCU 1.0,或者它的最新同级NodeMCU 2.0)。

它是比其他芯片贵一些(6.50美元比4美元!),但包括对芯片进行编程所需的串行驱动器,并具有内置的电源调节器以及许多IO引脚。它得到了广泛的支持,除了USB连接以外,实际上不需要任何其他程序来编程或供电,因此使用起来最简单。如果您购买任何其他种类的ESP8266开发板,则可能需要单独的3.3v电源调节器和合适的FTDI连接进行编程。

ESP8266-12E和Arduino入门

首先,为该板安装串行驱动程序。如果由于新的安全系统而正在运行El Capitan,则可能需要禁用KEXT签名。

下一步,我们需要从Arduino IDE的板管理器中启用对ESP8266的支持。打开“首选项",然后输入以下URL,其中显示其他Board Manager URL

点击确定,然后从中打开 Boards Manager >工具->板菜单,搜索esp8266并安装平台。现在,您应该可以看到NodeMCU 1.0的选择。

保持CPU和上载速度不变,然后选择新安装的串行端口。在Mac上,它显示为 cu.SLAB_USBtoUART

作为第一个程序,我建议使用简单的Wi-Fi扫描器-从文件->示例中找到它-> ESP8266WiFi-> WifiScan 。请注意,上传速度很慢,但最终会说``完成上传'',到那时(不是之前,否则您将中断上传过程),您可以打开串行监视器。您应该会看到类似的内容:

这是用于连接到Wi-Fi网络的绝对简单的准系统代码。它不仅可以连接,还可以做其他任何事情,但是您可以稍后再添加。只需记住将YOUR_SSID和YOUR_PASSWORD更改为您的Wi-Fi详细信息即可。上传,打开串行控制台,您应该会看到它正在连接。

这多么简单吗?

Before we carry on, here’s the pinout diagram – it might come in handy later. Note that the pin numbers referred to in code are the GPIO numbers, not the D0-16 probably written on your board PCB. If you absolutely, positively cannot figure out why a sensor isn’t working, you’ve probably mixed the pin numbers up.

带有MQTT和DHT11的快速智能家居传感器

这是一个实际示例,您可以立即使用它来监视您的房屋。我们将添加DHT11温度和湿度传感器,然后使用MQTT协议通过Wi-Fi网络报告这些值,在我的情况下,该报告将报告给OpenHAB DIY家庭自动化系统(如果没有,您可能需要阅读我们的初学者指南

在接线侧,将DHT传感器连接到 GND 3.3v 〜D4 (或GPIO 2)。这就是我们现在所需要的。

下载这些MQTT和DHT库。 即使您已经拥有它们,也无论如何都要下载它们,备份所拥有的内容,并用它们覆盖。来自Adafruit的最新DHT11库使用自动算法来确定从传感器读取数据的速度,但是在ESP8266上存在错误,并且90%的时间会导致读取失败。

使用旧版本我已下载的库中有1.0的库,您可以手动更改时序:11对这些ESP2866板最有效。我还遍历了MQTT库的许多副本,试图找到一个很好的 callback 函数,最后找到了其中的一个。替换掉它们后,您需要重新启动Arduino IDE。

这是项目的完整代码。顶部是您需要更改的所有变量,包括Wi-Fi详细信息,MQTT服务器(虽然没有身份验证,但如果使用云服务器,则可以使用URL代替URL,)以及发布数据的渠道。

这是它的工作方式和一些注意事项:

  • 首先我们连接到Wi-Fi,然后连接到MQTT服务器,然后开始主 loop()。
  • 在循环中,我们每60秒轮询DHT传感器并将读数发布到相关的MQTT通道。同样,如果您发现大多数读数都导致失败消息,则说明DHT库的版本错误–降级至v1.0。
  • client.loop()将控制权传递给MQTT库,使其能够对传入消息做出反应。
  • 我们有一个 messageReceived()函数用于处理传入消息–只需执行简单的if语句来比较有效载荷以及您期望的消息。例如,您可以使用它来激活继电器。
  • 运行了几天后,我发现它们会随机停止工作–我认为这是某种内存泄漏,但是鉴于我没有我没有编码技能来解决这个问题,而且可能与核心库有关,我每天都选择简单的软重置。传感器节点首次激活后的正好一天,它们将自行重启。
  • 从3.3v为这些廉价DHT11模块供电时,湿度值远远低于其应有的水平。我已经通过简单的乘法解决了这一问题,并针对商用传感器进行了校准。我建议您在阅读之前,也请先根据自己的已知来源进行确认。或者,用5V为它们供电–但是您必须在数据引脚和ESP8266之间放置一个5v-3.3v逻辑电平转换器,否则会损坏它。
  • 如果一切顺利好了,您现在应该已经在MQTT代理中接收传感器读数,并且可以按照我们的初学者指南的第2部分中的详细说明将它们连接到OpenHAB,

    告别Arduino,我们如此爱你。只是在开玩笑:我家的每个地方甚至都没有Wi-Fi,因此对于那些地点,我仍然需要一个带有Arduino和RF接收器的网状网络。带有ESP8266的Wi-Fi按钮。

    但是,ESP8266会如何?您是否希望在PCPC.me上看到所有使用ESP8266的项目?在评论中让我们知道!

    标签: Arduino 电子产品 物联网 智能传感器