zoukankan      html  css  js  c++  java
  • IOT(esp8266)

    今日工具

    • 硬件:
      • esp8266
      • DHT11温湿度传感器
    • 软件:
      • Arduino

    ESP8266 是一款由乐鑫 Espressif 公司制作的低成本的 Wi-Fi 芯片,具有完整的 TCP / IP 协议栈和微控制器功能。它专为移动设备、可穿戴电子产品和物联网应用设计,功耗很低且价格非常低廉。
    我这里使用的 NodeMcu 开发板即搭载了这款芯片。

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

    一、初始化配置

    我也是佛了自己,拿个充电线当数据线,在那里疯狂尝试,看了n篇博文,下了n个驱动······
    
    1. 下载 Arduino IDE 并配置
    • 官网传送门:https://www.arduino.cc/en/main/software
    • 安装正常跟随就好
    • 打开后,进入首选项,找到附加开发板管理器地址,在后面添加信息:
      http://arduino.esp8266.com/stable/package_esp8266com_index.json
    • 点击工具- 开发板 - 开发板管理器,找到esp8266并安装
    • 重启,看到 ESP8266 开发板选项,结束

    二、安装驱动

    驱动下载地址:蓝奏云
    记得用数据线,数据线,数据线!!!
    不然驱动安装完了还是识别不了串口,当你发现有CH340出现,则成功

    三、测量温湿度(第一个项目)

    本实例中,使用 DHT11 温湿度传感器测量室内湿度和温度,再把结果输出到 Arduino IDE的串口监视器中

    • 加载两个依赖库(项目 - 加载库 - 管理库,搜索安装)

      • Adafruit Unified Sensor
      • DHT sensor library
    • 新建工程

      • 源代码:
    #include "DHT.h"
    #define DHTPIN 5
    #define DHTTYPE DHT11
    
    // Initialize DHT sensor
    DHT dht(DHTPIN, DHTTYPE, 15);
    
    void setup() {
    
      // Start Serial  
      Serial.begin(115200); 
     
      // Init DHT 
      dht.begin();
    }
    
    void loop() {
    
      // Reading temperature and humidity
      float h = dht.readHumidity();
      float t = dht.readTemperature();
    
      // Display data
      Serial.print("Humidity: "); 
      Serial.print(h);
      Serial.print(" %	");
      Serial.print("Temperature: "); 
      Serial.print(t);
      Serial.println(" *C ");
      
       // Wait a few seconds between measurements.
      delay(2000);
    }
    
    • 接线:
    NodeMcu DHT11
    3V VCC
    GND GND
    D1 DATA
    • 编译运行,记得选对端口
    • 打开串口监视器查看运行结果

    地处杭州,人在寝室

    四、连接WiFi环境(核心功能)

    • ESP8266WiFi库安装一下

    • 示例代码

    // Import required libraries
    #include <ESP8266WiFi.h>
    
    // WiFi parameters
    const char* ssid = "your_wifi_name";
    const char* password = "your_wifi_password";
    
    void setup(void)
    {
      // Start Serial
      Serial.begin(115200);
      
      // Connect to WiFi
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println("");
      Serial.println("WiFi connected");
      
      // Print the IP address
      Serial.println(WiFi.localIP());
    }
           
    void loop() {
    }
    
    • 编译上传

    博主用的是手机热点,实测是没什么问题的。
    说起这个,我之前暑假就想做物联网了,然后开学前几天,闲鱼捡了一个路由器,奈何学校好像是动态IP,得用老毛子操作一波:|但是我那个路由器又内存太小了,刷不了固件,可能是因为TP-LINK的原因,专家建议以后去买Tenda,可玩性高hhhhh
    不过现在也不用路由器咯~

    四、 aREST 框架

    aREST 框架可以为一些常见的嵌入式开发板提供 RESTful 接口,支持通过串口、Wi-Fi、以太网、蓝牙等硬件发送命令至开发板,激发特定的操作,并将数据以 JSON 的格式返回给控制端用户。

    使用 aREST 框架既可以在本地网络环境中控制联网设备,也可以借助云端平台进行远程操作或监控。

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

    • 实例代码
    // Import required libraries
    #include "ESP8266WiFi.h"
    #include <aREST.h>
    #include "DHT.h"
    
    // DHT11 sensor pins
    #define DHTPIN 5
    #define DHTTYPE DHT11
    
    // Create aREST instance
    aREST rest = aREST();
    
    // Initialize DHT sensor
    DHT dht(DHTPIN, DHTTYPE, 15);
    
    // WiFi parameters
    const char* ssid = "wifi-name";
    const char* password = "wifi-pass";
    
    // The port to listen for incoming TCP connections 
    #define LISTEN_PORT           80
    
    // Create an instance of the server
    WiFiServer server(LISTEN_PORT);
    
    // Variables to be exposed to the API
    float temperature;
    float humidity;
    
    void setup(void)
    {  
      // Start Serial
      Serial.begin(115200);
      
      // Init DHT 
      dht.begin();
      
      // Init variables and expose them to REST API
      rest.variable("temperature",&temperature);
      rest.variable("humidity",&humidity);
        
      // Give name and ID to device
      rest.set_id("1");
      rest.set_name("esp8266");
      
      // Connect to WiFi
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println("");
      Serial.println("WiFi connected");
     
      // Start the server
      server.begin();
      Serial.println("Server started");
      
      // Print the IP address
      Serial.println(WiFi.localIP());
    }
    
    void loop() {
        
      // Reading temperature and humidity
      humidity = dht.readHumidity();
      temperature = dht.readTemperature();
      
      // Handle REST calls
      WiFiClient client = server.available();
      if (!client) {
        return;
      }
      while(!client.available()){
        delay(1);
      }
      rest.handle(client);
    }
    

    输入ip地址访问,需在一个WiFi环境下

    还想连接 OLED 显示出来,明天再做吧,晚上报名了阿里云的 ECS课堂,先重置了ECS,这几天还会做些IoT的项目ovo

    end
  • 相关阅读:
    markdown 书写文档的框架
    使用snap
    如何让pandas表格直接转换为markdown表格
    我们需要怎样去写博客
    jupyter notebook 远程访问
    安装tensorflowGPU版本
    Data Science Project
    使用python处理地理数据:Geopandas
    python移植环境
    Jupyter notbook& REVEAL.JS& nbconvert 使用jupyter notebook制作slides
  • 原文地址:https://www.cnblogs.com/ZhengBlogs/p/esp8266_1.html
Copyright © 2011-2022 走看看