Converting a $20 4G wireless hotspot into a texting device

Converting a $20 4G wireless hotspot into a texting device

将 20 美元的 4G 无线热点改装成短信设备

The motivation. I don’t organize my things well. I try to, but quite often end up with a bunch of stuff on my desk. From various aliexpress orders and projects I’m working on, all the way to gifts and stuff I didn’t have time to find a place for. That is exactly how this project came to be. 动机。我不擅长整理物品。我尝试过,但桌子上总会堆满各种东西。从各种速卖通(AliExpress)的订单和正在进行的项目,到礼物以及没时间处理的杂物。这个项目正是这样诞生的。

At one point in time I had, lying on my desk: Various, hopefully openstick compatible, models - namely the: MF800 - one I ended up using; UZ801 - OK size, but no battery or sufficient visible GPIO; USB drive form factor one I ditched because of other issues; The Clicks Keyboard for iPhone 16 Pro Max (gift from my cousin - too bad I don’t have an appropriate iPhone 🥲); The Adafruit SHARP Memory Display board. And of course, my caveman brain combined the 3. Okay, okay, not to lie I was probably a bit conditioned by knowing about: Beepy by sqfmi, Playdate. 当时我的桌上放着:各种可能兼容 OpenStick 的型号——即 MF800(我最终使用的型号)、UZ801(尺寸还可以,但没有电池或足够的可见 GPIO)、以及因为其他问题被我放弃的 USB 驱动器形态型号;还有 iPhone 16 Pro Max 的 Clicks 键盘(表弟送的礼物——可惜我没有对应的 iPhone 🥲);以及 Adafruit SHARP 内存显示屏板。当然,我的原始大脑把这三者结合在了一起。好吧,说实话,我可能受到了一些启发,因为我知道:sqfmi 的 Beepy 和 Playdate。

The modem. Due to the mysterious laws of supply and demand, and the magic of supply chains - somehow you can get a 4G modem with WiFi, bluetooth, a display, fully battery powered and completely unlocked - for less than $20 shipped. This, of course, is the cornerstone of our project. 调制解调器。由于神秘的供需规律和供应链的魔力,你竟然能以不到 20 美元(含运费)的价格买到一个带 WiFi、蓝牙、显示屏、全电池供电且完全解锁的 4G 调制解调器。这当然是我们项目的基石。

There are versions with and without a display. The non-display one just swaps the display for LED-s, though the PCB is the same. Display is a GC9107 powered one, but it looks like ass so i ditched it. Linux can be installed trivially, powered by the wonderful openstick project. The stock device runs Android, but adb is accessible out of the box - and from adb you can go straight to edl and reflash the thing. Just make sure to save all the important partitions. There are also pins on the pcb which you can short out to get straight to edl. Extracting the running device tree from the running android was a goldmine of information so be sure to do that. 有带显示屏和不带显示屏的版本。不带显示屏的版本只是把屏幕换成了 LED,但 PCB 是一样的。原装显示屏是 GC9107 驱动的,但效果太差,所以我弃用了。在出色的 OpenStick 项目支持下,安装 Linux 非常简单。原设备运行 Android,但开箱即可访问 ADB——通过 ADB 可以直接进入 EDL 模式并重新刷机。只需确保备份所有重要分区即可。PCB 上还有一些引脚,短接它们也可以直接进入 EDL。从运行中的 Android 系统提取设备树(device tree)是获取信息的金矿,所以一定要做这一步。

The keyboard. There is not much to say about the Clicks Keyboard. It feels veeery nice to use, the only issue is you need to fork over quite a few clams - made worse because you are going to have to cut it 😱. Regarding the protocol, it’s exactly what I expected with my previous experience of working with MFi devices - just a regular USB keyboard with an additional Apple proprietary endpoint which the iPhone can authorize with before allowing the keyboard to go through. So for our device this means that it’s just a regular keyboard. 键盘。关于 Clicks 键盘没什么好说的。用起来非常舒服,唯一的问题是你得花不少钱——更糟糕的是,你还得把它切开 😱。关于协议,这和我之前处理 MFi 设备的经验完全一致——它就是一个普通的 USB 键盘,外加一个苹果专有的端点,iPhone 在允许键盘工作前会先进行授权。所以对于我们的设备来说,它就是一个普通的键盘。

The display. I think the sharp display look great with the high contrast (and it plays well into my use case of a dumb device used only for messaging). Other than that, if there wasn’t much to say about the keyboard - then there is absolutely nothing more to say here. It’s a display. You send commands. It displays. 显示屏。我认为 Sharp 显示屏的高对比度看起来很棒(而且非常符合我将其作为仅用于消息传递的“哑设备”的使用场景)。除此之外,如果说键盘没什么可说的,那这里就更没什么可说的了。它就是一个显示屏。你发送指令,它就显示。

The adapter PCB. One thing became clear to me quite fast - I was going to have to add a custom PCB. I wasn’t exactly sure what the MF800 had on-board, and I never did end up opening the shield can - but I am fairly certain there is no 5V booster on-board. Because of the physical sizes, which we will go over further in the post, the USB connector will end up chopped off - so we need a way to handle that too. The final PCB ended up handling the USB host mode power, USB host/device mode switching, display power and display signal level conversion. 转接 PCB。有一件事我很快就清楚了——我必须增加一块定制 PCB。我不确定 MF800 板载了什么,我也没去拆开屏蔽罩——但我相当确定板上没有 5V 升压模块。由于物理尺寸(我们稍后会详细讨论),USB 接口最终会被切掉,所以我们需要一种方法来处理这个问题。最终的 PCB 负责处理 USB 主机模式供电、USB 主机/设备模式切换、显示屏供电以及显示屏信号电平转换。

Enclosure. The MF800 is quite a bit bigger than other opensticks, partly because of the battery it has to include, partly because of it’s slop nature. So to fit inside a Clicks case, we either orient it vertically and end up with a humongous abomination, or we trim the pcb to fit horizontally. 外壳。MF800 比其他 OpenStick 设备大得多,部分原因是它必须内置电池,部分原因是它做工比较粗糙。因此,为了塞进 Clicks 的外壳,我们要么垂直放置,得到一个巨大的怪物,要么修剪 PCB 使其水平适配。

Cutting. Cutting the PCB went unexpectedly well. The device booted up immediately and everything seemed to work. Turns out there really were no crucial lines going through those areas of the PCB. The only things I didn’t test were the USB connection and the 4G modem. The modem I was 99% sure wouldn’t be an issue as there is no reason to route anything for it under those areas - but regarding the USB I was worried that I hadn’t maybe nicked the via. 切割。PCB 的切割过程出奇地顺利。设备立即启动,一切似乎都正常。事实证明,那些区域确实没有关键线路经过。我唯一没测试的是 USB 连接和 4G 调制解调器。对于调制解调器,我有 99% 的把握不会有问题,因为没有理由在那些区域下方布线——但对于 USB,我担心自己可能不小心切到了过孔(via)。

Wiring. I decided to reuse the pads from the old display. I don’t really know why anymore - possibly because my initial idea was to use a rigid-flex PCB and solder it similar to how the original display was. 接线。我决定复用旧显示屏的焊盘。我现在也不太清楚为什么——可能是因为我最初的想法是使用刚挠结合板(rigid-flex PCB),并像原装显示屏那样进行焊接。