【ESP-IDF 教程】入门 ESP32 项目开发
ESP_Friends
编辑于 2023年11月02日 04:08

本示例基于 ESP-IDF 来实现通过手机 APP ESP-RainMaker 来远程控制 WS2812 灯带、显示实时的天气信息还有向手机发送提醒。

本项目实现了以下功能:

  • Wi-Fi 连接

  • HTTP 请求

  • JSON 格式的数据运用/解析

  • 驱动 WS2812

  • RainMaker 云端交互

此项目还提供了详细的视频教程: 

Gitee 代码地址:

代码块
JavaScript
自动换行
复制代码
https://gitee.com/esp-friends/get_weather_rainmaker
复制成功

最终成品展示:

带上底座的天气灯

ESP-RainMaker 手机 APP 界面

示例使用说明

准备硬件

  • ESP32-C3 开发板,如 ESP32-C3-DevKitM-1

  • USB 数据线 (A 转 Micro-B)

  • 电脑(Windows、Linux 或 macOS)

  • 杜邦线

  • WS2812 灯环(本示例使用 16 个 LED 版本)

搭建开发环境

安装 VSCode

如果你还没有安装 VSCode,请先下载并安装它。

    1. 从 VSCode 官网获取安装包

代码块
JavaScript
自动换行
复制代码
https://code.visualstudio.com/Download
复制成功

    2. 使用下载的 .exe 文件,一键安装 VSCode

安装 ESP-IDF 插件

  1. 在 VSCode 界面左边进入插件管理界面,搜索 esp-idf,点击下载带有乐鑫图标的插件

  2. 通过左上角的 view 打开命令面板,搜索 >ESP-IDF: Configure ESP-IDF extension 然后打开安装配置界面

  3. 选择 EXPRESS 使用快速安装模式进行安装

更详细的安装流程可以参考乐鑫官方的教学视频

手机下载 ESP RainMaker APP

  • ESP-RainMaker 手机 APP 下载链接

代码块
JavaScript
自动换行
复制代码
https://gitee.com/EspressifSystems/esp-rainmaker#phone-apps
复制成功

获取百度地图 API 密钥

前往百度开发者平台

代码块
JavaScript
自动换行
复制代码
http://lbsyun.baidu.com/
复制成功

点击创建应用获取开发者密钥

配置项目

必要配置

  • menuconfig 中配置 HTTP_URL_ADDRESS(百度地图 API 服务地址)

代码块
JavaScript
自动换行
复制代码
HTTP_URL_ADDRESS = "https://api.map.baidu.com/weather/v1/?district_id=区县的行政区划编码&data_type=all&ak=百度开发者密钥";
复制成功

自定义选配

  • 根据自己的芯片或者开发板型号在 menuconfig 中配置 BOARD_GPIO_BOOT (BOOT 键对应的 GPIO)。默认为 ESP32-C3 的 GPIO 9

  • menuconfig 中配置 LED_GPIO_INPUT (控制 WS2812 的 GPIO)。默认为 GPIO 10

  • menuconfig 中配置 LED_COUNT (LED 的数量)。默认为 16 个

编译和烧录

  1. 连接开发板到 PC 端,选择端口

  2. 编译工程

  3. 烧录固件到开发板

  4. 运行串口监视

VSCode ESP-IDF 插件界面

更详细的烧录流程参考乐鑫官方的教学视频 (从 4:00 分开始)

示例输出

代码块
JavaScript
自动换行
复制代码
I (32209) esp_rmaker_time: SNTP Synchronised.

I (32209) esp_rmaker_time: The current time is: Tue Oct 24 19:23:18 2023 +0800[CST], DST: No.

I (44859) esp_rmaker_param: Received params: {"今日天气":{"get_weather":true}}

I (44859) HTTP_CLIENT: Received write request via : Cloud

I (44859) HTTP_CLIENT: Device name: 今日天气 - Device param: get_weather

I (44869) HTTP_CLIENT: Received value = true for 今日天气 - get_weather

I (44879) HTTP_CLIENT: weather_get = true

I (44879) esp_rmaker_param: Reporting params: {"今日天气":{"get_weather":true}}

I (45779) APP_DRIVER: HTTP GET Status = 200, content_length = 1150

I (45789) APP_DRIVER: 地区 浦东新区

I (45789) APP_DRIVER: 天气 晴

I (45789) APP_DRIVER: 温度 22

I (45789) APP_DRIVER: 湿度 82

I (45799) APP_DRIVER: 风力 0级

I (45799) esp_rmaker_param: Reporting Time Series Data for 今日天气.Temperature

I (45809) esp_rmaker_param: Reporting params: {"今日天气":{"Temperature":22.00000}}

I (45819) esp_rmaker_param: Reporting params: {"今日天气":{"天气":"晴"}}

I (45829) esp_rmaker_param: Reporting params: {"今日天气":{"地区":"浦东新区"}}

I (45839) esp_rmaker_param: Reporting params: {"今日天气":{"风力":"0级"}}

I (45849) esp_rmaker_param: Reporting params: {"今日天气":{"湿度":82}}

I (45949) esp_rmaker_param: Reporting alert: {"esp.alert.str":"高温天气!小心中暑"}

I (45949) APP_DRIVER: HTTP_EVENT_DISCONNECTED
复制成功

故障排除

程序上传失败

  • 硬件连接不正确,检查 COM 端口 和 USB 驱动

ESP RainMaker APP 闪退

  • 检查 ESP RainMaker APP 是否有更新

技术支持和反馈

  • 对于技术问题,请访问 esp32.com 论坛

  • 对于功能请求或错误报告,请创建 Gitee Issues 问题