ESP8266-01是一款很强大的模块,能够知足咱们任何IOT项目的需求。自发布以来,它已经造成了一个很强大的群体,并演变成一个易于使用、价格低廉且功能强大的Wi-Fi模块。另外一个更受欢迎的开源平台是Arduino开发板,围绕该平台,已经创建起大量的项目。将这两个平台相结合将为许多创新项目打开大门,所以在本教程中,咱们将学习如何将ESP8266-01模块与Arduino进行链接。这样就能够在Arduino开发板和互联网之间发送或接收数据。html
为了实现目标,咱们将使用ESP8266-01经过一个API接口从互联网中读取时间、日期、温度和湿度。而后将这些值发送到Arduino板,并将它们显示在LCD显示屏1602上。听起来是否是很酷!那么让咱们开始吧。git
所需的材料github
● Arduino开发板编程
● ESP8266-01模块json
● 带有3.3V选项的FTDI编程电路板api
● 液晶显示屏1602浏览器
● 电位器安全
● 按钮ide
● 链接导线函数
● 面包板
如何工做的?
在咱们深刻研究以前,了解这件事情的实际状况很是重要。咱们须要从ESP8266-01模块的基础开始。使用Arduino IDE对ESP8266编程,并将编写代码以使用API经过http请求读取JSON文件。而后将解析这个JSON文件,从完整的JSON文件中只提取所需的信息。
一旦信息解析完成,咱们将使用串行通讯将其打印出来。这些串口线链接到Arduino,以便Arduino能够读取ESP8266发送的信息。一旦信息被读取和处理,咱们将在LCD液晶屏上进行显示。
若是你尚未彻底理解,不要紧,咱们将在本文的其他部分进行介绍。
编程ESP8266-01
本教程假定您有一些ESP8266模块的使用经验。若是没有的话,建议阅读如下三个教程以更好地理解。
● 使用Arduino IDE编程ESP8266-01并进行烧写程序
在这里,咱们将使用Arduino IDE编程ESP8266-01模块。硬件方面,咱们使用3.3V的FTDI板编程ESP8266,由于它可使硬件变得很是简单。下图显示了将ESP8266与FTDI板链接的电路图。
确保知足如下条件
1. ESP8266-01模块只支持3.3V,不要使用5V。因此只能在3.3V模式下设置FTDI。
2. 编程模式下,GPIO_0必须接地
3. 复位引脚应经过按钮链接到接地引脚。上传代码以前应该按下该按钮。每次按下该按钮时,ESP8266-01模块上的蓝色LED指示灯将变为高电平,表示模块已复位。
链接完成后,打开Arduino IDE并检查是否能够成功上传示例程序。若是您不肯定如何使用Arduino IDE将程序上传至ESP8266,请阅读Arduino编程ESP8266进行学习。
如今让咱们进入实际的程序,咱们将从互联网获取数据并将其发送给Arduino。完整的程序在本文末尾处给出,我将其分开对其进行解释。该程序编译时还须要Arduino JSON库,因此若是您还没有将该库添加到Arduino IDE中,则能够经过从Github的Arduino JSON库下载并进行添加。
ESP8266必须链接互联网才能得到有关日期、时间、温度和湿度的数据。因此你在下面的代码中必须提供SSID和密码,容许它来链接到你的Wi-Fi。
在setup()函数中,咱们检查ESP是否可以链接到Wi-Fi,若是没有,只需在串行监视器上打印“Connecting ..”,它将一直等待。
下一步是很是重要的一步。若是Wi-Fi链接成功,咱们必须调用http get请求从互联网读取JSON文件。在本教程中,我使用wunderground.com提供的API。所以,若是您打算使用相同的API,则能够进入连接并注册免费API密钥或使用您选择的任何API。一旦你完成了你的API,你将最终获得一个以下所示的连接
http://api.wunderground.com/api/abcd124578qwert/conditions/q/IN/Chennai.json
注意:我已更改此连接的API密钥,所以这不会起做用。请注意保持您的API密钥安全,不要共享。
个人API用于获取Chennai的天气数据。您可使用任何API。可是当你在任何浏览器中加载API时,它应该返回一个JSON文件。例如个人API返回如下JSON文件
您可能会返回具备不一样数据的文件。咱们能够经过读取它来检查ESP8266是否也收到了这个JSON文件,而后在串行监视器上使用打印JSON,代码以下:
我已经注释掉这些代码,由于它们仅用于测试。一旦确保ESP8266可以获取JSON数据,就须要对数据进行解析。正如你所看到的,这些数据量很大,除了咱们须要的数据如日期、时间、温度和湿度外,大部分数据都是无用的。
因此咱们使用JSON Arduino库来分离须要的值并将其存储在一个变量中。这种方法是可行的,由于JSON文件中的值被分配为名称值对。因此这个名字是一个字符串,它将保存咱们所需的值。