设计一个可共享的电子纸名片
NameCardKnot是一款固件,可在M5Paper或PaperS3上显示名片图像,并在设备间共享名片数据。
名片数据通过基于浏览器的NameCardKnot编辑器创建。你可以选择在设备上显示的图片,并设置姓名、图片、网址以及要分享的信息。编辑器会将所有内容导出为.mnc.pdf文件,设备从microSD卡中读取该文件。
将共享与接收界面靠近约两秒钟,设备将使用HotKnot交换连接信息,然后通过Wi-Fi传输名片数据。收到的名片将保存到microSD卡中,并可通过“相册”查看。你可以选择单向共享或双向交换。工作原理
什么是 HotKnot?
HotKnot 是 Goodix 电容式触摸控制器内置的一种短距离数据通信功能。它无需额外的 NFC 集成芯片和天线,即可让两个触摸面板在面对面时相互检测并交换少量数据。
M5Paper 和 PaperS3 均采用 GT911 触摸控制器。该芯片通常用于检测手指在屏幕上的位置,但在 HotKnot 模式下,它可以检测并与其他 GT911 控制器进行通信。NameCardKnot 的实现方式中,共享端作为主设备(Master),接收端作为从设备(Slave)。
HotKnot 不适用于传输大文件,例如图片或 PDF。NameCardKnot 实现每次最多可携带 128 字节的有效载荷。因此,HotKnot 仅通过 Wi-Fi 传输简短的连接描述符,而实际的名片数据则在第二阶段通过 Wi-Fi 发送。
从 HotKnot 到 Wi-Fi 的传输流程
通信过程如下:
•创建一次性连接信息
共享设备生成一个简短的连接描述符,其中包含应用程序和传输协议的标识符、Wi-Fi 频道、端口以及随机种子。设备不再存储固定的SSID和密码,而是从该种子中获取相同的连接凭据。每次会话都会生成一个新的描述符,并在传输结束时被丢弃。
•将屏幕对齐并通过HotKnot配对
当两块屏幕面对面贴合时,GT911控制器会相互检测到对方。配对完成后,每台设备都将HotKnot数据传输子系统加载到GT911的SRAM中,共享设备向接收设备发送连接描述符。这些步骤在屏幕保持贴合状态下进行。
•在设备之间建立临时Wi-Fi连接
一旦接收到描述符,共享设备便会启动一个Wi-Fi软AP,接收设备作为接入点加入其中。由于两台设备均从同一种子获取相同凭据,因此无需路由器或预先配置Wi-Fi即可直接连接。临时接入点采用WPA2加密,并在会话结束时自动关闭。随后,设备通过TCP建立名称卡传输会话。此时,屏幕可被分离。
协商传输方向并发送名称卡数据设备首先交换一条简短消息,以确认双方是否可以发送卡片以及是否接受对方的卡片。默认情况下,卡片由共享设备单向发送至接收设备。如果共享方收到回复,并且接收方设置为返回自己的卡片,则双方会通过两条数据流同时交换卡片。
•验证并保存接收到的数据
传入的数据会被写入临时文件,在文件完整到达后进行格式验证。只有有效的文件才会被移动到microSD卡上的“ReceivedCards”文件夹中,因此中断传输不会导致卡片在相册中损坏。传输完成后,临时Wi-Fi连接将被关闭,设备将自动重启。
在HotKnot通信过程中,GT911会停止正常的触控检测。在M5Paper和PaperS3设备上,ESP32无法直接控制GT911的复位信号,因此设备必须重启,才能可靠地将控制器恢复到正常触控操作状态。因此,NameCardKnot在设备连接后,会切换至非交互式传输界面,完成所有数据传输和文件操作,然后自动重启。
共享内容
由NameCardKnot编辑器生成的.mnc.pdf文件包含两种类型的数据:
•显示数据:您在M5Paper或PaperS3设备上所显示的图像
•共享数据:您的姓名、最多两张图片、一个URL以及发送给收件人的消息
该文件可作为普通PDF打开:第一页包含设备上的显示图像,第二页预览共享内容。当在不同设备间传输卡片时,NameCardKnot会移除显示数据,仅以.snc.pdf格式发送共享数据。由于文件预先结构化为两个部分,内存受限的ESP32无需重新构建PDF,而是通过从原始文件开头复制共享部分来创建仅包含共享内容的文件。接收设备可读取并显示 .snc.pdf 文件中的名称、图像、URL 和消息。URL 也可以以二维码形式显示,接收到的文件可通过普通 PDF 阅读器打开。
动机
该项目始于我研究 GT911 触摸控制器,以为 M5Stack Tab5 构建一个 BSP(板级软件)。在阅读数据手册和编程指南以了解如何读取触摸坐标时,我发现该芯片还支持一种名为 HotKnot 的触摸屏通信功能。
当时 ESP32 没有现成的 HotKnot 实现方案,但我发现 GitHub 上有一个适用于 AOSP 的、支持 HotKnot 的 GT911 驱动程序。以此为基础,我编写了一个 ESP-IDF 驱动程序,并成功在 Tab5 上实现了 HotKnot 功能。
随后,我开始寻找适合该功能的应用程序,发现 M5Paper 和 PaperS3 使用与 Tab5 相同的 GT911 控制器。
在创客活动中,我经常看到人们使用电子纸设备作为名片来展示个人资料。由于 HotKnot 也能在 M5Paper 和 PaperS3 上运行,我认为如果这些设备能够交换名片数据会非常有趣,于是便开发了 NameCardKnot。
功能
•通过HotKnot实现触碰配对,支持Wi-Fi直接传输名片
•采用Floyd–Steinberg抖动技术与自定义EPD驱动器,实现高品质灰度渲染
•支持低功耗自动关机功能
•提供英文和日文用户界面
•屏幕可180°旋转
使用方法
所需设备
•M5Paper或PaperS3
•已格式化为FAT32的microSD卡
1. 刷写固件
在 M5Burner 中,选择适用于您设备的 NameCardKnot 固件,并将其刷写到 M5Paper 或 PaperS3 上。
首次启动时,请按照屏幕提示选择语言并设置日期和时间。日期和时间将用于记录接收姓名卡数据的时间点。
2. 在 NameCardKnot 编辑器中创建名片
打开浏览器中的 NameCardKnot 编辑器,并配置以下内容:
•名字
•您可在自己的设备上显示的图片
可与收件人分享的一两张图片
•URL(可选)
•消息(可选)
预览后,下载 .mnc.pdf 文件。您可以将显示的图片用作共享图片,或选择另一张专门用于收件人的图片。3. 从microSD卡中打开姓名卡
将下载的.mnc.pdf文件复制到microSD卡中,并插入设备。在NameCardKnot的文件浏览器中选择该文件,即可在电子纸屏幕上显示姓名卡图像。
对于经常使用的卡片,可从主屏幕的“我的卡片”中导入,这样无需每次从microSD卡中选择即可显示和分享该卡片。4. 在两台设备之间共享或交换卡片1. 在发送设备上打开共享。2. 在接收设备上打开接收。3. 要实现双向交换,请在共享设备上开启“也接收他们的卡片”选项,并在接收设备上开启“也发送我的卡片”选项。4. 将两个屏幕面对面地并排摆放,仿佛堆叠在一起,保持大约两秒钟。5. 连接后,拆开屏幕并等待进度指示器完成以及设备重启。在PaperS3上,当屏幕可以拆开时会发出蜂鸣声。
收到的卡片将自动保存到microSD卡中的“ReceivedCards”文件夹中,并可在主屏幕的图库中查看。
本文编译自hackster.io





