ESP-IDF 插件:用 embed_txtfiles 优雅地在固件里“塞”文件

0x00 背景

最近在翻看 GSC (Google Search Console) 的搜索关键词时,发现 esp-idf embed-txtfiles 这个词的出现频率高得惊人。看来大家在搞 ESP32 开发的时候,都被“如何在固件里优雅地放一个文件”这个问题困扰过。

在此之前,我为了实现一些功能(比如之前的那个桌面像素小屏幕),曾傻乎乎地把图片全转成了巨大的 C 数组(.h 文件)。结果可想而知:代码文件膨胀到几万行,IDE 索引卡死,每次微调一个像素都要重新编译半天,简直是灾难

不管是 HTTPS 的根证书、前端 HTML 页面,还是简单的配置文件,如果全都写成巨大的 const char[] 硬编码到代码里,那工程维护简直是自我折磨。今天就拿着我那块斥 9.9 元巨资买回来的 ESP32-C3 演示一下如何用 ESP-IDF 里的这个黑科技优雅地填坑

embed_textfiles

阅读更多
屏幕不够,算法来凑(二):ESP32 单色屏上的 Ditherpunk 实战

屏幕不够,算法来凑(二):ESP32 单色屏上的 Ditherpunk 实战

0x00 序

上一篇文章中,我们在浏览器中通过 JavaScript 模拟了各种抖动算法的视觉效果。虽然原理通透了,但真正的挑战在于硬件端:如何在资源受限的嵌入式设备上复现这些效果?

本文将记录我基于 ESP32-S3 和一块 1.54 寸 ST7305 单色屏的实战过程,探讨如何在单片机上实现从基础的阈值法到复杂的误差扩散等多种图像处理算法。

阅读更多

告别AT指令:ESP32通过PPPoS驱动4G模块上网

前言

在之前的文章中,我们都是利用ESP32自带的WiFi进行网络连接。但在户外或者没有WiFi覆盖的角落,想要让设备联网,就得请出“4G模块”了。

air780eg_modem

通常大家驱动4G模块(比如SIM800, Air724, EC20等)最原始的方法是用UART发送AT指令。
比如 AT+HTTPINITAT+HTTPPARA… 这种方式不仅繁琐,而且解析返回字符串简直是噩梦,写出来的代码全是状态机,一旦模块吐点乱码,程序直接暴毙。手动解析AT指令简直是坏文明!

为了优雅地使用4G模块,我决定使用 PPPoS(Point-to-Point Protocol over Serial)。
简单来说,就是把串口“伪装”成一个网卡。这样底层的TCP/IP协议栈(LwIP)就能直接接管网络,我们写上层代码时,完全不用关心是在用WiFi还是4G,直接调标准的Socket接口就完事了。

So Fragrant

阅读更多

CH592F利用SPI+DMA驱动WS2812灯珠

前言

在上一篇《从零开始:用CH592F制作CS2生命值胸章》的文章中,我展示了如何利用CH592F这颗蓝牙芯片制作一个和游戏联动的生命值指示器.

而本文将介绍生命值计数器的一个技术细节:如何使用CH592F驱动WS2812.
虽然WS2812的时序要求比较严格,通常可以使用GPIO翻转配合精准延时来实现,但那样会占用大量的CPU资源,导致蓝牙协议栈或其他中断任务受阻.
为了实现“零”CPU占用的炫酷灯效,我决定利用CH592F的SPI外设配合DMA来模拟WS2812的时序.
WS2812Timing

阅读更多

DWM3001CDK点亮WS2812 RGB LED

背景

去年参加了FastBond的第四期活动, 为了能够白嫖到这块开发板子, 不得不掏出这块板子在Deadline之前完成一个项目.
看了下活动要求, 感觉点灯是最简单的. 不过既然点灯了, 就点个稍微有点难度的吧.
比如点亮能让性能增加200%的WS2812 RGB LED.

阅读更多

UNO R4 Wi-Fi 接入 Home Assistant

项目介绍

本项目是Funpack第五期板卡三的任务1实现.
任务目标是让UNO R4 Wi-Fi通过网络连接到智能云端, 并模拟成一个可以控制的灯, 通过远程控制调整自带的LED矩阵点亮范围.

实现思路

将UNO R4作为灯装置接入IOT平台, 随后在IOT平台上下发命令来操作UNO R4, 调整这个”灯”的亮度.
这里我选择的是可以部署在内网环境下的Home Assistant.

UNO R4通过MQTT服务器与Home Assistant进行通信. MQTT服务器选择EMQX开源版.

结构图

阅读更多

定制控制器, 将米家1代屏幕挂灯接入HomeKit

前言

我住的屋子床头没有插座也没有控制房间顶灯的开关,假如熄灯睡觉的话会让房间陷入一片漆黑.
所以很长一段时间里我都把米家屏幕挂灯的控制器放在床头,用于临时照明.

这就引发了另外一个问题,每次回家开电脑打开屏幕挂灯,我都得走到床头找到控制器开启屏幕挂灯.
在经历了多次麻烦后,我决定把这个屏幕挂灯接入HomeKit. 这样就可以用语音或者手机控制了.

资料搜集

在阅读了这篇拆解报告:MJ米家显示器挂灯MJGJD01YL后, 需要做的工作就很明确了.
大致分为以下几个步骤

  • 阅读手册,找到控制引脚
  • 拆除芯片,替换成ESP32
  • 编写代码,接入HomeKit
阅读更多

ESP32 进阶开发杂谈:从异步请求、动图显示到资源OTA

前言

很多时候,我们从零开始构建一个ESP32项目,往往会掉进各种各样的“坑”里。

在之前的一些项目中(比如做个桌面像素小屏幕吧),我遇到过各种各样的问题:网络请求卡死主线程、屏幕显示太单调、休眠时PWM停转、以及每次只更新几张图片却要重刷整个固件的痛苦。

把这些坑踩平之后,我整理了四个在ESP32开发中非常实用的技巧。为了避免大家重蹈覆辙,也为了方便我自己日后查阅(Copy),这篇文章将把这些技术点汇总起来。

希望能给正在折腾ESP32的你提供一些灵感。

阅读更多