电子说
对于任何物联网(DIY)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,其中显示 Additional 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详细信息即可。上传,打开串行控制台,您应该会看到它已连接。
#include
const char* ssid = “YOUR_SSID”;
const char* password = “YOUR_PASSWORD”;
WiFiClient wifiClient;
void setup() {
Serial.begin(115200);
Serial.print(“Connecting to ”);
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(“。”);
}
Serial.println(“”);
Serial.println(“WiFi connected”);
Serial.println(“IP address: ”);
Serial.println(WiFi.localIP());
}
void loop() {
}
难道这是如此简单吗?
在我们携带之前上面是引脚图-稍后可能会派上用场。请注意,代码中提到的引脚号是GPIO号,而不是可能写在板PCB上的D0-16。如果绝对不能肯定地确定传感器不起作用的原因,那么您可能已经混淆了引脚号。
快速智能家居传感器使用MQTT和DHT11
这是一个实际示例,您可以立即使用它来监视您的房屋。我们将添加DHT11温度和湿度传感器,然后使用MQTT协议通过Wi-Fi网络报告这些值,在我的情况下,该报告将报告给OpenHAB DIY家庭自动化系统(如果没有,您可能需要阅读我们的初学者指南使OpenHAB在Raspberry Pi上启动并运行,以及第2部分,专门讨论安装MQTT服务器。
在接线侧,将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服务器,然后开始主循环()。
在循环中,我们每60秒轮询DHT传感器并将读数发布到相关的MQTT通道。同样,如果您发现大多数读数都导致失败消息,则说明DHT库的版本错误–降级至v1.0。
client.loop()将控制权传递给MQTT库,使其能够对传入消息做出反应。
我们有一个 messageReceived()函数用于处理传入消息–只需执行简单的if语句来比较有效载荷以及您期望的消息。例如,您可以使用它来激活继电器。
运行了几天后,我发现它们会随机停止工作–我认为这是某种内存泄漏,但是鉴于我没有我没有编码技能来解决这个问题,而且可能与核心库有关,所以我每天都选择asimple软复位。传感器节点首次激活后的正好一天,它们将自行重启。
从3.3v为这些廉价DHT11模块供电时,湿度值远远低于其应有的水平。我已经通过简单的乘法解决了这一问题,并针对商用传感器进行了校准。我建议您在阅读之前,也请先根据自己的已知来源进行确认。或者,用5V为它们供电–但是您必须在数据引脚和ESP8266之间放置一个5v-3.3v逻辑电平转换器,否则会损坏它。。
如果一切顺利,您现在应该在MQTT代理中接收传感器读数,并且可以按照我们的初学者指南第2部分中的详细说明将它们连接到OpenHAB,在这里我还向您展示了如何绘制数据图。
告别Arduino,我们如此爱你。只是开个玩笑:我家的每个地方甚至都没有Wi-Fi,因此对于那些地点,我仍然需要带有Arduino和RF接收器的网状网络。
要进行有趣的项目,请查看如何制作一个ESP8266的Wi-Fi按钮。
责任编辑:wv
全部0条评论
快来发表一下你的评论吧 !