查看: 12529|回复: 0

[经验] Arduino IDE 搭建 ESP8266 开发环境及项目演示

[复制链接]
  • TA的每日心情
    开心
    2019-11-4 13:48
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2019-2-18 16:42:02 | 显示全部楼层 |阅读模式
    分享到:
    ESP8266 是一款由乐鑫 Espressif 公司制作的低成本的 Wi-Fi 芯片,具有完整的 TCP / IP 协议栈和微控制器功能。它专为移动设备、可穿戴电子产品和物联网应用设计,功耗很低且价格非常低廉
    我这里使用的 NodeMcu 开发板即搭载了这款芯片。

    Arduino IDE 是由 Arduino 官方提供的支持 C 语言的集成开发环境,主要是针对 Arduino 系列的开发板进行编程。
    通过简单的配置,可以在原本的编程环境里添加上对 ESP8266 开发板的支持。对于熟悉 Arduino 函数库和开发流程的用户,基本上没有任何使用上的区别。


    一、添加 ESP8266 支持首先从 Arduino 官网 下载最新版本的 Arduino IDE 软件并安装。
    安装完成以后,进入首选项(Preferences),找到附加开发板管理器地址(Additional Board Manager URLs),并在其后添加如下信息:
    http://arduino.esp8266.com/stable/package_esp8266com_index.json

    1.png
    管理器附加地址



    之后点击工具 - 开发板 - 开发板管理器,进入开发板管理器界面:
    2.png
    开发板管理器


    找到 esp8266 并安装:
    3.png

    安装完成后,重启 Arduino IDE 软件。在工具 - 开发板选项中即会看到 ESP8266 开发板的选项:
    4.png
    二、测量温湿度
    本例中使用 DHT11 温湿度传感器测量室内温度和湿度,再把测量所得的结果输出至 Arduino IDE 的串口监视器中。
    源代码
    在 Arduino IDE 中新建项目并写入如下代码:
    1. #include "DHT.h"
    2. #define DHTPIN 5
    3. #define DHTTYPE DHT11

    4. // Initialize DHT sensor
    5. DHT dht(DHTPIN, DHTTYPE, 15);

    6. void setup() {

    7.   // Start Serial  
    8.   Serial.begin(115200);

    9.   // Init DHT
    10.   dht.begin();
    11. }

    12. void loop() {

    13.   // Reading temperature and humidity
    14.   float h = dht.readHumidity();
    15.   float t = dht.readTemperature();

    16.   // Display data
    17.   Serial.print("Humidity: ");
    18.   Serial.print(h);
    19.   Serial.print(" %\t");
    20.   Serial.print("Temperature: ");
    21.   Serial.print(t);
    22.   Serial.println(" *C ");
    23.   
    24.    // Wait a few seconds between measurements.
    25.   delay(2000);
    26. }
    复制代码
    由于源代码中首行引入的 DHT 库并不是 Arduino IDE 内置的库文件,需要先点击项目 - 加载库 - 管理库进入库管理器,搜索安装如下两个依赖库(Adafruit Unified Sensor 和 DHT sensor library):
    5.png
    线路连接
    该测试项目只需要连接好 NodeMcu 开发板与 DHT11 温湿度模块(或者单独的 DHT11 元件配合 5kΩ 的上拉电阻),无需额外的传感器模块和电子组件。
    线路连接示意图如下:
    6.png

    [td]
    NodeMcuDHT11
    3V3VCC(Pin1)
    GNDGND(Pin4)
    D1DATA(Pin2)
    3V35k 电阻 - DATA(Pin2)



    编译运行Arduino IDE 实际上支持非常多的基于 ESP8266 芯片设计的开发板,如 Adafruit Feather HUZZAH ESP8266LOLIN (WEMOS) D1 mini 等。可以根据自己购买的开发板的具体型号,在编译前选择对应的开发板选项(工具 - 开发板)。
    我这里使用的是开源NodeMcu v1.0 开发板,编译代码前确保选择正确:
    7.png

    最终的运行效果如下:
    8.png

    呃,,南方的冬天,外面在下雨。室内,没开空调。。。(后面温湿度升高是因为,我对着传感器哈气了。。。)
    注意事项可以看到,源代码中的 DHTPIN (即传感器 DATA 引脚需要连接的开发板引脚 )定义为 5 ,但开发板实际连接的是 D1 引脚(而不是 D5)。
    ESP8266 芯片有自己的引脚(GPIO)布局,但是基于该芯片设计的众多开发板,对于芯片上 GPIO 的引出方式却有自己的规则。
    即源代码中的 5 指的并不是开发板的引脚 D5 ,而是 ESP8266 的引脚 GPIO 5 ,对应到开发板上即是 D1 引脚。
    相关的引脚布局如下图所示:
    9.png

    三、Wi-Fi 连接
    ESP8266 最大的特性就是其超低成本的 Wi-Fi 实现。
    这里简单贴出其连接 Wi-Fi 的示例代码:
    1. // Import required libraries
    2. #include <ESP8266WiFi.h>

    3. // WiFi parameters
    4. const char* ssid = "your_wifi_name";
    5. const char* password = "your_wifi_password";

    6. void setup(void)
    7. {
    8.   // Start Serial
    9.   Serial.begin(115200);
    10.   
    11.   // Connect to WiFi
    12.   WiFi.begin(ssid, password);
    13.   while (WiFi.status() != WL_CONNECTED) {
    14.     delay(500);
    15.     Serial.print(".");
    16.   }
    17.   Serial.println("");
    18.   Serial.println("WiFi connected");
    19.   
    20.   // Print the IP address
    21.   Serial.println(WiFi.localIP());
    22. }
    23.       
    24. void loop() {
    25. }
    复制代码
    运行结果如下:







    10.png


    四、aREST
    aREST 框架可以为一些常见的嵌入式开发板提供 RESTful 接口,支持通过串口、Wi-Fi、以太网、蓝牙等硬件发送命令至开发板,激发特定的操作,并将数据以 JSON 的格式返回给控制端用户。
    11.png
    使用 aREST 框架既可以在本地网络环境中控制联网设备,也可以借助云端平台进行远程操作或监控。

    结合之前的温湿度项目,可以将连接 Wi-Fi 后的 NodeMcu 开发板作为一个实现了 REST API 的本地服务器,通过访问其 IP 地址来获取相应的温湿度数据(JSON 格式)。
    代码如下:

    1. // Import required libraries
    2. #include "ESP8266WiFi.h"
    3. #include <aREST.h>
    4. #include "DHT.h"

    5. // DHT11 sensor pins
    6. #define DHTPIN 5
    7. #define DHTTYPE DHT11

    8. // Create aREST instance
    9. aREST rest = aREST();

    10. // Initialize DHT sensor
    11. DHT dht(DHTPIN, DHTTYPE, 15);

    12. // WiFi parameters
    13. const char* ssid = "wifi-name";
    14. const char* password = "wifi-pass";

    15. // The port to listen for incoming TCP connections
    16. #define LISTEN_PORT           80

    17. // Create an instance of the server
    18. WiFiServer server(LISTEN_PORT);

    19. // Variables to be exposed to the API
    20. float temperature;
    21. float humidity;

    22. void setup(void)
    23. {  
    24.   // Start Serial
    25.   Serial.begin(115200);
    26.   
    27.   // Init DHT
    28.   dht.begin();
    29.   
    30.   // Init variables and expose them to REST API
    31.   rest.variable("temperature",&temperature);
    32.   rest.variable("humidity",&humidity);
    33.    
    34.   // Give name and ID to device
    35.   rest.set_id("1");
    36.   rest.set_name("esp8266");
    37.   
    38.   // Connect to WiFi
    39.   WiFi.begin(ssid, password);
    40.   while (WiFi.status() != WL_CONNECTED) {
    41.     delay(500);
    42.     Serial.print(".");
    43.   }
    44.   Serial.println("");
    45.   Serial.println("WiFi connected");

    46.   // Start the server
    47.   server.begin();
    48.   Serial.println("Server started");
    49.   
    50.   // Print the IP address
    51.   Serial.println(WiFi.localIP());
    52. }

    53. void loop() {
    54.    
    55.   // Reading temperature and humidity
    56.   humidity = dht.readHumidity();
    57.   temperature = dht.readTemperature();
    58.   
    59.   // Handle REST calls
    60.   WiFiClient client = server.available();
    61.   if (!client) {
    62.     return;
    63.   }
    64.   while(!client.available()){
    65.     delay(1);
    66.   }
    67.   rest.handle(client);
    68. }
    复制代码

    运行效果:
    12.png

    以上只是一些基础的使用介绍吧,,,后续比如更加复杂的网络服务、对接公共的物联网云平台及 MQTT 协议等内容,有时间再看看。我去,光着脚,12℃。冻死我了。。。


    参考资料
    本文作者:rollingstarky
    来源:简书









    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-19 22:45 , Processed in 0.127518 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.