ESP32 Homekit实战 - 调节LED亮度

ESP32教程系列
1 - 认识ESP32
2 - Arduino IDE安装&配置
3 - 基本操作
4 - WiFi配网
5 - WebServer①
6 - Web Server②控制输出
7 - Web Server③ HTML&CSS基础
8 - Web Server④ 在Arduinio中添加HTML&CSS
9 - 异步网页服务器 Asynchronous Web Server(DHT11)
10 - OTA ESP32无线升级,告别数据线

ESP32实战系列
WiFi遥控小车

ESP32 Homekit系列
Homekit & Homespan介绍
点亮一颗LED
调节LED亮度

一、 项目准备

硬件

  • 核心控制:ESP32开发板(如NodeMCU-32S或ESP32-WROOM)
  • 照明组件:LED灯(普通或RGB)、220Ω限流电阻
  • 连接工具:杜邦线、面包板(可选)
  • 电源:USB数据线或5V电源适配器

软件

安装HomeSpan库

若Arduino库管理器无HomeSpan 2.1.1版本,需科学上网在库文件环境中安装或手动安装。

手动安装方法:
  • 从GitHub下载HomeSpan 2.1.1源码
  • 解压后复制至Arduino库目录(通常为 Documents/Arduino/libraries)。
  • 重启Arduino IDE,验证是否在 文件 > 示例 中看到“HomeSpan”示例

二、 电路接线

参考ESP32教程(基于Arduino IDE)3-基本操作

三、代码

/*
 *Arduino IDE       2.3.4
 *ESP32 Board       3.1.1
 *HomeSpan          2.1.1
 *Partition scheme  Minimal SPIFFs(菜单栏的 工具>Partition Scheme
 *芯片:ESP32-C3
 *作者:+大钱硬件
*/

#include "HomeSpan.h"  // 引入 HomeSpan 库

#define LED_PIN 8  // 定义 LED 连接的 GPIO 引脚(内置 LED 通常在 GPIO 2)

struct LEDController : Service::LightBulb {  // 定义一个自定义灯泡服务类
  SpanCharacteristic *power;                 // 定义开关状态的特性
  SpanCharacteristic *brightness;            // 定义亮度特性
  int ledPin;

  LEDController(int pin)
    : Service::LightBulb() {                          // 构造函数
    power = new Characteristic::On();                 // 初始化开关特性
    brightness = new Characteristic::Brightness(50);  // 初始化亮度特性,默认亮度为 50%
    ledPin = pin;                                     // 设置 LED 引脚
    pinMode(ledPin, OUTPUT);                          // 配置引脚为输出模式
    digitalWrite(ledPin, LOW);                        // 默认关闭 LED
  }

  boolean update() override {                       // 当 HomeKit 更新特性时调用
    int brightnessValue = brightness->getNewVal();  // 获取亮度值
    int pwmValue = map(brightnessValue, 0, 100, 0, 255);// 将亮度值映射到 0-255 范围(因为 analogWrite 接受 0-255 的值)
    analogWrite(ledPin, pwmValue);  //设置 LED 亮度
    return true;  // 更新成功
  }
};

void setup() {
  Serial.begin(115200);  // 初始化串口,波特率为 115200
  delay(1000);           // 短暂延迟以确保串口初始化完成
  Serial.println("\nHomeSpan Setup: Starting...");

  homeSpan.setLogLevel(0);                          // 设置日志级别为 0,减少日志输出
  homeSpan.begin(Category::Lighting, "ESP32 LED");  // 初始化 HomeSpan,设备类别为“照明”
  homeSpan.setPairingCode("15975326");

  // 创建一个 HomeKit 配件
  new SpanAccessory();
  new Service::AccessoryInformation();            // 配件信息服务
  new Characteristic::Name("ESP32 LED");          // 配件名称
  new Characteristic::Manufacturer("+大钱硬件");  // 制造商
  new Characteristic::SerialNumber("HS-001");     // 序列号
  new Characteristic::Model("LED Controller");    // 型号
  new Characteristic::FirmwareRevision("2.1.1");  // 固件版本
  new Characteristic::Identify();                 // 识别功能

  // 添加自定义灯泡服务
  new LEDController(LED_PIN);

  Serial.println("设置完成。如果还未配置WiFi,请进行配置。");
  Serial.println("打开串口监视器并输入 'W' 来设置WiFi凭证,或者连接到 'HomeSpan-Setup' 接入点。");
}

void loop() {
  homeSpan.poll();  // 处理 HomeSpan 的循环任务
}

四、家庭App端的操作

由于上一个教程已添加过配件,所以此次不用重复添加。
逐渐调整滑动条,可以看到蓝色LED灯在逐步变亮。
在这里插入图片描述

※关注公众号,获取源码,Homespan库文件
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值