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(" %\t");
  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
posted @ 2020-09-23 17:11  你好我叫郑某人  阅读(1878)  评论(2编辑  收藏  举报