181|0

20

帖子

8

TA的资源

一粒金砂(中级)

楼主
 

【2024 DigiKey 创意大赛】移植openHASP项目,实现家庭物联网控制中心 [复制链接]

  本帖最后由 eew_dy9f48 于 2024-10-27 14:49 编辑

一、作品简介
openHASP是一个适配于homeassistant的显示面板,底层代码是基于lvgl编写的,特别对esp32-s3进行了优化。但比较遗憾的是目前这个项目并不支持ESP32-S3-LCD-EV-BOARD这块开发板。由于这块板子上的480*480屏幕,非常适合作为86面板嵌入在墙上,作为家庭物联网的控制中心,因此我想把openHASP这个项目移植到ESP32-S3-LCD-EV-BOARD开发板上。

移植完成后,我会用它来制作一个小型家庭灯光控制面板。同时用ESP32-S3-DEVKITC-1-N8R8开发板作为被控的灯光设备,来演示控制过程。

二、系统框图
项目分为三个部分完成。

第一部分是openhasp的移植,让它可以运行在ESP32-S3-LCD-EV-BOARD开发板上。

第二部分是openhasp的配置,在上面完成一个灯光控制的页面设计。

第三部分是使用ESP32-S3-DEVKITC-1-N8R8制作一个灯光控制器,作为openhasp的被控端来使用。

 

三、各部分功能说明

第一部分,移植openhasp:

先去OpenHASP仓库拿到所有源代码:

Git clone https://github.com/HASwitchPlate/openHASP

打开项目后,可以发现项目是使用platformio编写的,这对我们后续移植提供了很大的便利。

开发板的配置文件都存放在user_setups中。先找一个类似的配置文件,这里主要指的是通过并口驱动电容触摸屏的开发板。可以选择user_setups\esp32s3\esp32-s3-4848S040.ini。复制创建一个新的,然后可以开始修改。

主要的修改是几块,第一块是把文件内所有的开发板名称都修改,比如我改成了esp32-s3-4848s040_16MB-ev

。以此避免命名冲突。第二块是修改屏幕驱动,把原本的ST7701去掉,换成-D GC9503V_DRIVER=1。第三块是修改触摸驱动。我们开发板使用的触摸驱动是FT5X06,虽然openhasp项目中集成了这款驱动,但是如果想使用还需要下载额外的库,比较麻烦。经过实测FT6336的驱动也可以完美工作,因此我们只需要对应修改-D TOUCH_DRIVER=0x6336,并对应修改-D I2C_TOUCH_ADDRESS=0x38就可以了。最后一块是pin的修改,把LCD和触摸驱动引脚一一对应修改好就可以。这里特别需要注意一点,由于开发板默认的SPI配置引脚使用的是IO拓展器拓展出来的,因此我们需要修改一下硬件部分,让这三个引脚直接使用ESP32S3的引脚。具体修改要改动R92,93,94

 

按照我下面的方法把三个电阻移动一下位置就可以。

 

创建好配置修改好电路后,我们更改一下编译配置文件,就可以开始上传了。注意这时候不要动他原本的platformio.ini,而应该复制一份新的platformio_override-template.ini,然后重命名成platformio_override.ini,并在里面修改extra_configs = user_setups/esp32s3/*.ini以及extra_default_envs = esp32-s3-4848s040_16MB-ev。完成后编译上传,看到屏幕有了下面显示,就说明以及成功移植了openhasp项目。

 

 

第二部分,配置openhasp并绘制GUI:

首先会看到屏幕上显示一个二维码,用手机按照指示连接对应的热点并扫二维码进去配置wifi,完成后重启,设备就可以连上网络:

 

重启后默认当设备连上网后,会弹出设备IP地址。我们输入这个ip,就可以进入配置页面。在这个地方就可以完成对GUI的编写。

先进入configuration里的MQTT Settings配置一下MQTT服务器的设置。MQTT可以在自己电脑上搭建,也可以使用公共的。这里就不再赘述。

 

接着返回主页,进入File Editor,就可以开始编写GUI。

     

GUI的编写全部都在pages.jsonl这一个文件中完成。这里我只创建了一个组件,是一个按键矩阵。可以非常方便的使用配置语言在这里添加各种各样的组件。

 

 

 

写完后点击右上角的Reload Pages,就可以看到创建好的页面。

 

 

第三部分,灯光控制器制作。

现在开始用第二块开发板,ESP32-S3-DEVKITC-1-N8R8来进行开发。

这里为了方便快捷,我使用circuitpython进行开发。去到官方固件下载页面,可以直接使用open installer按钮进行固件刷新。

https://circuitpython.org/board/espressif_esp32s3_devkitc_1_n8r8/

 

接着参考官方MQTT示例和neopixel,稍作修改,当收到对应的MQTT指令后点亮对应的灯就可以。关键的回调函数逻辑如下:

def message(client, topic, message):

    global state

    # This method is called when a topic the client is subscribed to

    # has a new message.

    print(f"New message on topic {topic}: {message}")

    payload = json.loads(message)

    if payload["event"] != "up":

        return

    if payload["text"] == "RED":

        state["red"] = (not state["red"]) * 255

    elif payload["text"] == "GREEN":

        state["green"] = (not state["green"]) * 255

    elif payload["text"] == "BLUE":

        state["blue"] = (not state["blue"]) * 255

    elif payload["text"] == "ALL":

        if state["red"] + state["green"] + state["blue"]:

            state["red"] = 0

            state["green"] = 0

            state["blue"] = 0

        else :

            state["red"] = 255

            state["green"] = 255

            state["blue"] = 255

    pixels[0] = (state["red"], state["green"], state["blue"])

四、作品源码

 

source_code.zip (5.21 KB, 下载次数: 0)

 

五、作品功能演示视频

 

10月27日

 

 

六、项目总结

这个项目使用了一块非常强大的触屏开发板,可以用它作为家庭物联网人机交互中枢来控制所有家电。通过这个项目我成功移植了openhasp,可以大大简化后续实际使用的复杂度。

DigiKey_2024大赛.doc (2.27 MB, 下载次数: 6)
点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表