eew_dy9f48 发表于 2024-10-27 14:10

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

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

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

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

<p><strong>二、系统框图</strong><br />
项目分为三个部分完成。</p>

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

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

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

<p> &nbsp;</p>

<p><strong>三、各部分功能说明</strong></p>

<p>第一部分,移植openhasp:</p>

<p>先去OpenHASP仓库拿到所有源代码:</p>

<pre>
<code>Git clone https://github.com/HASwitchPlate/openHASP</code></pre>

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

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

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

<p>。以此避免命名冲突。第二块是修改屏幕驱动,把原本的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</p>

<p> &nbsp;</p>

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

<p> &nbsp;</p>

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

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>第二部分,配置openhasp并绘制GUI:</p>

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

<p></p>

<p>&nbsp;</p>

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

<p></p>

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

<p>&nbsp;</p>

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

<p>&nbsp; &nbsp; &nbsp;</p>

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

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

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

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>第三部分,灯光控制器制作。</p>

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

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

<p><a href="https://circuitpython.org/board/espressif_esp32s3_devkitc_1_n8r8/" target="_blank">https://circuitpython.org/board/espressif_esp32s3_devkitc_1_n8r8/</a></p>

<p> &nbsp;</p>

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

<pre>
<code>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 = (state["red"], state["green"], state["blue"])</code></pre>

<p><strong>四、作品源码</strong></p>

<p>&nbsp;</p>

<div></div>

<p>&nbsp;</p>

<p><strong>五、作品功能演示视频</strong></p>

<p>&nbsp;</p>

<p>92ba9e453aaf69831e782251d6a180b7<br />
&nbsp;</p>

<p>&nbsp;</p>

<p><strong>六、项目总结</strong></p>

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

<div></div>
页: [1]
查看完整版本: 【2024 DigiKey 创意大赛】移植openHASP项目,实现家庭物联网控制中心