第1步:功能
此板的主要特点是ESP32 FireBeetle开发板处理所有通信,传感器读数和输出。有两个步进电机驱动器,可控制两个双极步进电机。
I2C总线也已断开,可用于APDS9960或LCD等组件。为了读取温度,需要断开连接到DHT22传感器的引脚以及用于读取环境光水平的光敏电阻。
板上有一个模拟灯带,该模拟灯带具有三个MOSFET。
步骤2:PCB
我首先通过在Eagle中创建原理图开始了PCB设计过程。由于找不到ESP32 FireBeetle库,我只用了两个pin 1x18 pin接针。然后,我创建了一个电源管理电路,该电路可以通过DC桶式插座接受12v电压,并将其转换为5v,为传感器和ESP32供电。
原理图完成后,我着手设计PCB本身。
我知道DC桶形插头必须位于电路板的前端附近,并且100uF电源平滑电容器必须靠近步进电动机驱动器的电源输入。一切布置好后,我开始布线。
虽然Oshpark生产高质量的PCB,但价格却很高。值得庆幸的是,PCBGOGO.com还以合理的价格生产出了优质的PCB。我能够以5美元的价格购买10块PCB,而不是从Oshpark.com只需花52美元购买3块板。
步骤3:组装
总体来说,组装电路板非常容易。首先,我焊接了表面安装的组件,然后连接了桶形插孔连接器和调节器。接下来,我焊接了电机驱动器和FireBeetle等组件的排针。
焊接完成后,我通过将万用表置于电阻测量模式并观察了电路板是否短路来进行测试。如果电阻超过一定量。该板通过了,因此我可以插入每个组件。
步骤4:编程概述
我希望该板的代码为模块化且易于使用。这意味着有几个处理特定功能的类,以及一个将较小的类组合在一起的较大的包装器类。
步骤5:输入
为处理输入,我创建了一个名为“ Hub_Inputs”的类,该类可让家用集线器与APDS9960进行通信,以及创建和管理按钮以及电容式触摸界面。它包含以下功能:
创建按钮
获取按钮是否按下
获取按钮按下次数
获取最新手势
获取电容式触摸值
按钮以结构形式存储,具有三个属性:is_pressed,numberPresses和pin。每个按钮在创建后都会附加到中断中。触发该中断时,将向该按钮的指针(作为按钮在数组中的内存地址)传递给中断服务例程(ISR),并增加按钮的按下次数,并更新is_pressed布尔值。
电容式触摸值要简单得多。通过将touch引脚传递给touchRead()函数来检索它们。
通过轮询APDS9960并检查是否检测到任何新手势来更新最新手势,如果已检测到新手势,则将专用手势变量设置为该手势。
第6步:输出
智能家居中心具有几种输出信息和更换灯的方式。有一些引脚可以断开I2C总线,使用户可以连接LCD。到目前为止,仅支持一种LCD尺寸:20 x4。通过使用“ hub.display_message()”功能,用户可以通过传递字符串对象在LCD上显示消息。
有也是用于连接一串模拟LED的引脚接头。调用函数“ hub.set_led_strip(r,g,b)”,设置条带的颜色。
两个步进电机使用一对DRV8825驱动器板驱动。我决定使用BasicStepper库来处理电机控制。板子启动时,将创建两个步进对象,并且两个电动机都将启用。要步进每个电动机,请使用“ hub.step_motor(motor_id,steps)”功能,其中电动机id为0或1。
第7步:记录
由于开发板上有多个传感器,我希望能够在本地收集和记录数据。
开始记录,将使用“ hub.create_log(filename,header)”创建一个新文件,其中header用于制作表示列的CSV文件行。第一列始终是“年月日小时:分钟:秒”格式的时间戳。为了获取时间,hub.log_to_file()函数通过basic_functions.get_time()函数获取时间。然后,通过引用将tm时间结构以及数据和文件名传递给日志记录函数。
步骤8:蜂鸣器
如果您不能播放音乐,IoT板有什么用?这就是为什么我包括一个具有声音播放功能的蜂鸣器的原因。调用“ hub.play_sounds(旋律,持续时间,长度)”开始播放一首歌曲,旋律是音符频率的数组,持续时间是音符持续时间的数组,长度是音符数量。
步骤9:外部IoT集成
该中心目前支持IFTTT Webhooks。可以通过调用Hub_IoT.publish_webhook(URL,数据,事件,键)或Hub_IoT.publish_webhook(URL,数据)函数来触发它们。这会将带有该数据的POST请求发送到给定URL,并在必要时发送事件名称。要设置示例IFTTT集成,请首先创建一个新的applet。然后选择在收到请求时触发的webhook服务。
下一步,将事件称为“ high_temp”并保存。然后,为“该”部分选择Gmail服务,然后选择“向自己发送电子邮件”选项。在该服务的设置中,将主题的温度设置为“高温!”,然后在“ {{OccurredAt}}”处输入“ {{Value1}}的实测温度”,其中显示了实测温度和触发事件。
设置后,只需粘贴IFTTT生成的webhook URL,并将“ high_temp”放入事件部分。
步骤10 :用法
要使用Smart Home Hub,只需在setup()或loop()中调用任何需要的函数。我已经放置了示例函数调用,例如打印当前时间和调用IFTTT事件。
步骤11:未来计划
智能家居中心该系统非常适合简单的家庭自动化和数据收集任务。它几乎可以用于任何事情,例如设置LED灯带的颜色,监视房间的温度,检查灯是否亮着以及其他许多潜在项目。将来,我想进一步扩展功能。这可能包括添加更强大的Web服务器,本地文件托管,甚至是蓝牙或mqtt。