tag 标签: esp8266

相关帖子
相关博文
  • 热度 2
    2024-9-24 18:01
    475 次阅读|
    0 个评论
    本文简要介绍了搭建 EMQX 服务器实现基于 MQTT 协议远程控制 NodeMCU ESP8266 板载 LED 的解决方案。 简介 1. MQTT MQTT (Message Queuing Telemetry Transport)是一种基于 publish/subscribe (发布/订阅) 模式的 轻量级 通讯协议,构建于 TCP/IP 协议上,由 IBM 在1999年发布。 MQTT 可以实现用极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务 。 2. EMQX EMQX 是一款大规模分布式物联网 MQTT 服务器,单集群支持 1 亿物联网设备连接,消息分发时延低于 1 毫秒。为高可靠、高性能的物联网实时数据移动、处理和集成提供动力。 3. Home Assistant Home Assistant (HA) 家庭助理,是一款基于 Python 的智能家居开源系统,可以方便地连接各种外部设备,支持众多品牌的智能家居设备。 方案 安装 Home Assistant 使用 Docker 容器安装 Home Assistant , 下载 Docker 软件; C 盘根目录新建文件夹 homeassistant ; 下载部署文件 GitHub 并解压得到 docker-compose.yml 保存至上述 homeassistant 文件夹; Windows 打开 命令提示符 或 Windows PowerShell ,输入如下代码实现自动下载镜像 cd C: \ homeassistant docker-compose . yml docker-compose up 安装过程需大约 30 分钟,即可在 Docker 容器中创建 Home Assistant 镜像; 自动从镜像安装 Home Assistant 到容器。代码文件 docker-compose.yml 将映射 Home Assistant 配置文件到 C:/homeassistant 文件夹; 浏览器输入网址 http://localhost:8123/ 进入Home Assistant 主界面,创建智能家居账号。 详见: How to run Home Assistant Container on Windows using Docker - Kiril Peyanski's Blog . 安装 EMQX 使用 EMQX 最简单的方式是在 EMQX Cloud 上创建完全托管的 MQTT 服务。 这里我们使用 Docker 运行 EMQX Windows 命令行或 PowerShell 输入并执行如下代码 docker run - d -- name emqx - p 1883 : 1883 - p 8083 : 8083 - p 8084 : 8084 - p 8883 : 8883 - p 18083 : 18083 emqx / emqx : latest 等待进度条下载和部署完成(大约5分钟),即可获得 EMQX 服务器。 Docker 内的 localhost 或 127.0.0.1 指向的是容器内部地址,如需访问宿主机地址请使用宿主机的真实 IP . 详见: Gitee . 配置 EMQX (1)浏览器打开网址 http://localhost:18083/ ,初始登录账户名 admin 密码 public ; (2)依次打开 访问控制 - 客户端认证 - 创建 - Password-Based - 内置数据库 - (默认配置)- 创建 ; (3) 用户管理 - 新建用户 - 自定义用户名和密码(建议 admin). 连接 EMQX 与 HA (1)命令行或 PowerShell 输入 ipconfig 获取本地计算机 IPv4 地址,如 42.34.25.153 (2)配置 Home Assistant ,依次点击设置 - 设备与服务 - 添加集成 - 搜索 MQTT - 填写代理信息。 代理栏输入计算机 IP 地址,端口 1883,用户名和密码为 EMQX 中创建的用户信息。 (3)点击 提交 后显示 成功创建 MQTT ,此时 集成 选项下出现 MQTT 条目,EMQX 网页 集群 的 总连接数 和 在线连接数 由 0 变为 1 ,表明 MQTT 设备已连接。 参考: MQTT 接入 Home Assistant . 连接 ESP8266 与 EMQX 将如下代码下载至 ESP8266 开发板, 需要注意 MQTT 服务器地址,若是 EMQX Cloud,则根据创建远程节点填写地址;若是本地计算机或Docker容器,则填写本地物理 IP 地址。 主题为 MQTTX 客户端定义的订阅名称,客户名和密码则对应 EMQX 服务器客户端用户定义。 #include #include ​ #define LED 2 // on-board LED D4 ​ // WiFi const char * ssid = "xxx" ; // Enter your WiFi name const char * password = "xxxxxx" ; // Enter WiFi password ​ // MQTT Broker const char * mqtt_broker = "xx.xx.xx.xx" ; // EMQX Server IP const char * topic = "emqx/esp8266" ; // MQTTX topic const char * mqtt_username = "UART" ; // EMQX Server User Name const char * mqtt_password = "123456" ; //EMQX Server User Password const int mqtt_port = 1883 ; ​ bool ledState = false ; ​ WiFiClient espClient ; PubSubClient client ( espClient ); ​ void setup () { // Set software serial baud to 115200; Serial . begin ( 115200 ); delay ( 1000 ); // Delay for stability ​ // Connecting to a WiFi network WiFi . begin ( ssid , password ); while ( WiFi . status () != WL_CONNECTED ) { delay ( 500 ); Serial . println ( "Connecting to WiFi..." ); } Serial . println ( "Connected to the WiFi network" ); ​ // Setting LED pin as output pinMode ( LED , OUTPUT ); digitalWrite ( LED , LOW ); // Turn off the LED initially ​ // Connecting to an MQTT broker client . setServer ( mqtt_broker , mqtt_port ); client . setCallback ( callback ); while ( ! client . connected ()) { String client_id = "esp8266-client-" ; client_id += String ( WiFi . macAddress ()); Serial . printf ( "The client %s connects to the public MQTT broker\n" , client_id . c_str ()); if ( client . connect ( client_id . c_str (), mqtt_username , mqtt_password )) { Serial . println ( "Public EMQX MQTT broker connected" ); } else { Serial . print ( "Failed with state " ); Serial . print ( client . state ()); delay ( 2000 ); } } ​ // Publish and subscribe client . publish ( topic , "hello emqx" ); client . subscribe ( topic ); } ​ void callback ( char * topic , byte * payload , unsigned int length ) { Serial . print ( "Message arrived in topic: " ); Serial . println ( topic ); Serial . print ( "Message: " ); String message ; for ( int i = 0 ; i < length ; i ++ ) { message += ( char ) payload ; // Convert *byte to string } Serial . print ( message ); if ( message == "on" && ! ledState ) { digitalWrite ( LED , LOW ); // Turn on the LED ledState = true ; } if ( message == "off" && ledState ) { digitalWrite ( LED , HIGH ); // Turn off the LED ledState = false ; } Serial . println (); Serial . println ( "-----------------------" ); } ​ void loop () { client . loop (); delay ( 100 ); // Delay for a short period in each loop iteration } 测试 在 MQTTX 客户端向目标主题发送控制文本 on 和 off 以控制板载 LED 注意发送文本格式选项更改为 Plaintext . Arduino IDE 的串口助手监控可以观察到反馈信息 与 MQTTX 客户端操作类似,在 HomeAssistant 的 MQTT 设置 中向目标主题发送消息,即可控制 LED 的亮灭 参考: ESP8266 + MQTT :如何实现 LED 灯的远程控制 | EMQ (emqx.com) 视频 ​ 总结 完成该项目的关键在于环境搭建,即 HomeAssistant 和 EMQX 服务器的安装,由于是在 Windows 操作系统环境下,需要将其安装于 Docker 容器中运行,而 Docker 软件通过检索实现镜像安装需要科学上网,因此环境搭建是关键。 此外,该项目可进行扩展连接智能家居平台 HomeAssistant ,同样安装于 Docker 容器,只需要进行 MQTT 配置即可实现开关可视化和 APP 远程 LED 控制,参考 文章 ,具体操作如下 修改 HA 配置文件 configuration.yaml 添加如下代码,实现 LED 开关 的界面可视化 # add light mqtt : light : # Device name - name : "On-board LED" # State topic state_topic : "emqx/esp8266" # Command topic command_topic : "emqx/esp8266" # Command type payload_on : "on" payload_off : "off" # unique_ID unique_id : "on-board LED" # optimistic set optimistic : false 配置文件 configuration.yaml 的路径根据 HA 安装位置确定 保存配置文件后,在 开发者工具 中点击 所有 YAML 配置 实现重载配置文件,效果如下 点击开关按钮即可实现 NodeMCU-ESP8266 板载 LED 的亮灭控制。
  • 热度 2
    2024-8-13 18:25
    216 次阅读|
    0 个评论
    Arduino Nano 和 NodeMCU ESP8266 读取 DHT11 环境温湿度数据及 OLED显示 Arduino Nano 和 NodeMCU ESP8266 读取 DHT11 环境温湿度数据及 OLED显示 Arduino Nano 开发板 引脚定义 实物展示 代码 视频效果 NodeMCU ESP8266 开发板 引脚定义 实物展示 代码 视频效果 Arduino Nano 开发板 引脚定义 实物展示 代码 /* https://breakrow.com/miliohm/temperature-and-humidity-sensor-dht11-with-arduino-tutorial-make-oled-termometer/ 10 - DHT11 pin OLED: SDA - SDA SCL - SCL */ #include #include #include #include #include ​ #include "DHT.h" #define DHTPIN 10 // data connection pin of DHT11 #define DHTTYPE DHT11 // DHT 11 DHT dht ( DHTPIN , DHTTYPE ); ​ int h ; int t ; ​ #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels ​ // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) #define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display ( SCREEN_WIDTH , SCREEN_HEIGHT , & Wire , OLED_RESET ); ​ #define bitmap_height 128 #define bitmap_width 64 static const unsigned char PROGMEM logo_bmp [] = { 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3F , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x1F , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0F , 0x8F , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x08 , 0x0F , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x08 , 0x0F , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x08 , 0x0F , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x78 , 0x0F , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x08 , 0x0F , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x08 , 0x00 , 0x40 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x80 , 0x78 , 0x00 , 0x40 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x80 , 0x08 , 0x03 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0xC0 , 0x08 , 0x0F , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0xC0 , 0x78 , 0x03 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0xC0 , 0x78 , 0x07 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0xC0 , 0x08 , 0x0F , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0xE0 , 0x08 , 0x03 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x07 , 0xE0 , 0x78 , 0x0F , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x07 , 0xF0 , 0x08 , 0x03 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0F , 0xF0 , 0x08 , 0x00 , 0x40 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0F , 0xF8 , 0x78 , 0x00 , 0x40 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x1F , 0xF8 , 0x08 , 0x03 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x1F , 0xF8 , 0x08 , 0x0F , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3F , 0xFC , 0x78 , 0x03 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3F , 0xFE , 0x08 , 0x03 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x7F , 0xFE , 0x0F , 0x8F , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x7F , 0xFF , 0x7F , 0x83 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0xFF , 0x0F , 0x83 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0xFF , 0x0F , 0x83 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0xFF , 0xFF , 0x7F , 0x80 , 0x40 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0xFF , 0xFF , 0x0F , 0x8F , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0xFF , 0xFF , 0x0F , 0x87 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0xFF , 0xFF , 0x1F , 0x8F , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x07 , 0xFF , 0xFF , 0x7F , 0x83 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0F , 0xFF , 0xFF , 0x0F , 0x83 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0F , 0xFF , 0xFF , 0x0F , 0x8F , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x1F , 0xFF , 0xFF , 0x7F , 0x83 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x1F , 0xFF , 0xFF , 0x0F , 0x8F , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x1F , 0x0F , 0xF3 , 0xEF , 0x83 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3E , 0x03 , 0xE7 , 0xCF , 0xC0 , 0x40 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3C , 0x61 , 0xC7 , 0x9F , 0xE0 , 0x40 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x7C , 0x71 , 0xCF , 0xBF , 0xE3 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x7C , 0x71 , 0xCF , 0xBF , 0xF3 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x7C , 0x71 , 0x9F , 0xBF , 0xE3 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFC , 0x71 , 0x3F , 0xBF , 0xE3 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFC , 0x71 , 0x38 , 0x1F , 0xE7 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFC , 0x02 , 0x20 , 0x0F , 0x87 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFE , 0x06 , 0x46 , 0x03 , 0x0F , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0x8C , 0xC7 , 0x18 , 0x1F , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0xFC , 0xC7 , 0x1C , 0x7F , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0xF9 , 0xC7 , 0x1C , 0x7F , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0xF9 , 0xC7 , 0x1E , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x7F , 0xF3 , 0xC6 , 0x1F , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x7F , 0xE3 , 0xC0 , 0x3E , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x7F , 0xE7 , 0xE0 , 0x7E , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3F , 0xFF , 0xFF , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x1F , 0xFF , 0xFF , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x1F , 0xFF , 0xFF , 0xF8 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0F , 0xFF , 0xFF , 0xF0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x07 , 0xFF , 0xFF , 0xE0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0xFF , 0xFF , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x7F , 0xFF , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x1F , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0xE0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 }; ​ void setup () { Serial . begin ( 9600 ); dht . begin (); ​ // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally if ( ! display . begin ( SSD1306_SWITCHCAPVCC , 0x3C )) { // Address 0x3D for 128x64 Serial . println ( F ( "SSD1306 allocation failed" )); for (;;); // Don't proceed, loop forever } // Clear the buffer display . clearDisplay (); printText (); delay ( 1500 ); } ​ void loop () { h = dht . readHumidity (); t = dht . readTemperature (); if ( isnan ( h ) || isnan ( t )) { Serial . println ( "Failed to read from DHT sensor!" ); return ; } showBitmap (); printText (); display . display (); delay ( 500 ); display . clearDisplay (); } ​ void printText () { display . setFont ( & FreeMonoBold18pt7b ); display . setTextColor ( WHITE ); // Draw white text display . setCursor ( 45 , 28 ); // Start at top-left corner display . print ( t ); display . drawCircle ( 92 , 8 , 3 , WHITE ); display . setCursor ( 100 , 27 ); display . print ( "C" ); display . setCursor ( 45 , 62 ); display . print ( h ); display . print ( "%" ); ​ } ​ void showBitmap ( void ) { display . drawBitmap ( 0 , 0 , logo_bmp , bitmap_height , bitmap_width , WHITE ); //display.display(); } 视频效果 ​​ ​ NodeMCU ESP8266 开发板 引脚定义 实物展示 代码 /* https://cloud.tencent.com/developer/article/1688146 GPIO0 (D3) - DHT11 pin GPIO4 (D2) - SDA GPIO5 (D1) - SCL */ ​ #include #include #include #include #include ​ #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels ​ // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) Adafruit_SSD1306 display ( SCREEN_WIDTH , SCREEN_HEIGHT , & Wire , - 1 ); ​ #define DHTPIN 0 // Digital pin connected to the DHT sensor : GPIO0 - D3 ​ // Uncomment the type of sensor in use: #define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301) ​ DHT dht ( DHTPIN , DHTTYPE ); ​ void setup () { Serial . begin ( 9600 ); ​ dht . begin (); ​ if ( ! display . begin ( SSD1306_SWITCHCAPVCC , 0x3C )) { Serial . println ( F ( "SSD1306 allocation failed" )); for (;;); } delay ( 2000 ); display . clearDisplay (); display . setTextColor ( WHITE ); } ​ void loop () { delay ( 2000 ); ​ //read temperature and humidity float t = dht . readTemperature (); float h = dht . readHumidity (); if ( isnan ( h ) || isnan ( t )) { Serial . println ( "Failed to read from DHT sensor!" ); } // clear display display . clearDisplay (); // display temperature display . setTextSize ( 1 ); display . setCursor ( 0 , 0 ); display . print ( "Temperature: " ); display . setTextSize ( 2 ); display . setCursor ( 0 , 17 ); display . print ( t ); display . print ( " " ); display . setTextSize ( 1 ); display . cp437 ( true ); display . write ( 167 ); display . setTextSize ( 2 ); display . print ( "C" ); // display humidity display . setTextSize ( 1 ); display . setCursor ( 0 , 35 ); display . print ( "Humidity: " ); display . setTextSize ( 2 ); display . setCursor ( 0 , 45 ); display . print ( h ); display . print ( " %" ); display . display (); } 视频效果 ​​​ ​
  • 热度 3
    2024-2-11 18:24
    587 次阅读|
    1 个评论
    硬件方面 ESP8266是一块开发板,芯片常用的型号是 ESP-12F 该模块核心处理器 ESP8266 在较小尺 寸封装中集成了业界领先的 Tensilica L106 超低功耗 32 位微型 MCU,带有 16 位精 简模式,主频支持 80 MHz 和 160 MHz,支持 RTOS,集成 Wi-Fi MAC/ BB/RF/PA/LNA。 ESP-12F Wi-Fi 模块支持标准的 IEEE802.11 b/g/n 协议,完整的 TCP/IP 协议栈。 用户可以使用该模块为现有的设备添加联网功能,也可以构建独立的网络控制器。 软件方面 支持 Arduino IDE ,并且有 大量的库文件 支持ESP8266,让ESP8266的编程变得及其简单,非常适合新手入门! 价格方面 目前 ESP8266已经低于10块钱 了!属于白菜价级别了! ESP-12F也才5.2块钱 !新手入门最实惠开发板之一! 资料方面 ESP8266无论是在硬件层面还是软件层面上来说,现在网上都是有非常多的资料的!包括前面说的非常多的库文件,包括在各大论坛、博客都有非常多的资料,这些资料对小白来说非常的友好!而且通俗易懂! 总结 ESP8266(ESP-12F)作为一款国产芯片,拥有非常不错的性能,很低的售价,以及大量的资料,并且搭配Arduino IDE,让小白学起来非常轻松,让更多电子爱好者入门到单片机,同时也涌现出非常多好玩的项目,所以ESP8266火起来是必然的!也希望更多国产芯片厂商能够发展起来,给国人提供高性价比的芯片,以及更好的开发环境,学习环境!
  • 热度 1
    2023-11-24 11:06
    431 次阅读|
    0 个评论
    下面是一个简单的ESP8266 RELAY V3的Arduino代码示例: arduino 复制代码 # include const char * ssid = "your_ssid" ; // 输入你的WiFi SSID const char * password = "your_password" ; // 输入你的WiFi密码 // 定义继电器引脚 const int relayPin = 2 ; void setup () { // 初始化串口通信 Serial . begin ( 9600 ); Serial . println ( "ESP8266 Relay Example" ); // 连接到WiFi网络 WiFi . begin (ssid, password); while ( WiFi . status () != WL_CONNECTED) { delay ( 1000 ); Serial . println ( "Connecting to WiFi..." ); } // 打开继电器引脚 pinMode (relayPin, OUTPUT ); digitalWrite (relayPin, LOW ); // 默认关闭继电器 } void loop () { // 打开继电器 digitalWrite (relayPin, HIGH ); delay ( 1000 ); // 继电器打开1秒钟 // 关闭继电器 digitalWrite (relayPin, LOW ); delay ( 1000 ); // 继电器关闭1秒钟 } 在这个示例中,我们使用了ESP8266WiFi库来连接到WiFi网络。你需要将your_ssid和your_password替换为你的WiFi网络的SSID和密码。在setup()函数中,我们初始化了串口通信,并连接到WiFi网络。然后,我们打开了一个名为relayPin的引脚,并将其配置为输出模式。在loop()函数中,我们使用digitalWrite()函数来控制继电器的开关状态,并使用delay()函数来控制继电器的开关时间。
  • 热度 2
    2023-11-24 10:57
    372 次阅读|
    0 个评论
    ESP8266是一款低成本的WiFi芯片,可以用于许多物联网应用。如果你想调试和编译代码,以及使用SDK,以下是一些步骤: 1. 安装ESP8266开发环境 首先,你需要安装ESP8266的开发环境。你可以使用Eclipse或者Visual Studio Code等IDE,并安装相应的插件。 2. 安装ESP8266 SDK ESP8266 SDK是一个用于开发ESP8266应用程序的软件开发包。你可以从ESP8266官方网站下载SDK,并按照说明进行安装。 3. 编写代码 使用你选择的IDE编写代码。你可能需要包含ESP8266 SDK的头文件,并使用相应的函数来与WiFi连接、读取传感器数据等。 4. 编译代码 在编写完代码后,你需要编译代码。在IDE中,你可以选择编译选项,并选择编译目标(例如,使用ESP8266的哪个芯片)。 5. 调试代码 在编译完成后,你可以使用串口将代码烧录到ESP8266芯片上。你可能需要使用一个串口转USB的适配器,以及一个串口调试器软件(例如,PuTTY)来查看串口输出。在代码运行时,你可以查看串口输出,以检查代码是否正常运行。 6. 实用SDK ESP8266 SDK包含了许多实用的函数和库,可以帮助你快速开发应用程序。例如,你可以使用ESP8266 WiFi库来连接到WiFi网络,使用传感器库来读取传感器数据等。在编写代码时,你可以查看SDK的文档,以了解如何使用这些函数和库。
相关资源