Stickman Charles — From Software to Hardware

2026/8/9 GMT-4

Hello, I'm Stickman Charles.

For the past while I've been busy with the most important project of my summer: ForgeCard v0.

It doesn't sound difficult: connect an NFC reader module to a small computer and a screen, so that tapping a card displays the corresponding EchoID tier.

I took on this project mainly to see what the hardware world is actually like. Before this, I had built a fair number of projects with AI coding assistants, and some of them found real users and real feedback. But I've been a hardware enthusiast since I was small — watching videos about upgrading rigs and studying specs was my favorite thing to do. And I've always felt that an EchoID without a physical card is incomplete. So I drew up an eight-week plan, bought every part on the list, and looked forward to getting started.

It was only when I reached the first step — assembling the Raspberry Pi, the small computer — that I realized this wasn't as simple as I'd imagined.

Cost and No Cost

In software, testing and building cost almost nothing. As long as the environment is configured properly, a mistake doesn't cause much trouble. At worst you roll back with git; failing that, you delete the whole test environment.

In hardware, everything requires twice the care. Touch a faucet before assembling, or static will damage the board. Don't press too hard when attaching the heatsink, or you'll crush the CPU. Don't work on the pins while the power is on, or you'll get shocked. Once these parts are damaged, the mild outcome is a black screen and the severe one is a dead board. Everyone understands these rules, but in actual practice — especially when you repeat the same operations day after day — it's easy to forget one or two of them.

Once the Pi was assembled, the real challenge was still ahead.

Friction and No Friction

To attach the NFC module to the Pi, the first step is to flip a tiny switch on the module labeled I2C. The switch is extremely small. Only once it's on can you run wires to the row of pins on the Pi. But the module itself has only four holes, so to wire it up you have to mount a spider-shaped adapter onto it. That adapter is loose: even with the wires connected correctly, the moment it shifts, the terminal reports that it can't read the external device. And wiring it means opening the case, which means the cooling fan on the lid no longer blows on the CPU; it overheats, the connection drops, and you start over.

When I was assembling mine, the I2C switch had no marking for which side was on and which was off, so I simply tried every combination. I went through all of them and still couldn't read the device. Then I suspected the adapter was loose, or the wires had poor contact, so I replaced them all — and then the Pi overheated and the connection dropped outright.

Nothing to do but try again the next day. Same result: the same rows of dashes.

While I was still puzzling over it, my eyes drifted to the two wires from the cooler. It turned out they had been occupying the pins that belonged to the NFC module the whole time, and I hadn't noticed.

Because no matter which link in the chain fails, what comes back is the same rows of dashes.

The same thing happened with the screen: my mouse's 2.4G receiver sat right beside the screen's USB cable, the two interfered with each other, and the mouse kept failing to respond.

In software, the vast majority of errors are specific and frictionless. A syntax error is a syntax error. An indentation error is an indentation error. If a library needs updating, you get a message about it.

In hardware, you have to build the habit of working through problems one step at a time, and never skip a step because it seems obvious. Otherwise you're likely to miss the real cause.

Feedback

What remained after that was mostly writing code by hand and connecting a screen.

The moment the whole project came together and the card scanned successfully, the rush of dopamine was nothing like writing one more piece of software after having already written many.

AI coding has made software development simple and efficient, but it still can't reach into the physical world. In domains where there are no hints, or only vague ones, the kind of experience that looks somewhat old-fashioned is what actually proves useful.

Keep thinking, and take care.

Stickman Charles 从软件到硬件

2026/8/9 GMT-4

你好,我是Stickman Charles。

最近这段时间,我一直在忙暑假最重要的项目:ForgeCard v0。

这个项目听起来其实不难,就是把一个NFC刷卡模块连上一台小电脑和一块屏幕,刷一下卡就显示对应的EchoID等级。

做这个项目主要是为了体验一下硬件世界是什么样子。在此之前,我已经用AI编程助手做了不少项目,有的还获得了真实的用户和反馈。但是,我其实从小就是一个硬件迷,观看升级主机、研究参数的视频是我最爱干的事情。而且,我总觉得没有真实卡片的EchoID是不完整的。于是,我列了一个8周的计划表,把要买的配件全部买了下来,兴致勃勃地期待着这次的项目。

等到真正开始第一步——组装树莓派(也就是那台小电脑)的时候,我才意识到这件事没有我想的那么简单。

有成本与无成本

在软件世界,测试和创作几乎不需要付出成本。只要环境配置得当,做错了也不会引发什么大问题。大不了git回滚,实在不行删掉整个测试环境。

然而,在硬件世界,一切都得加倍小心。组装之前要先摸水龙头,不然静电会损伤电路板。装散热鳍片的时候不能太用力,不然会压坏CPU。不可以在插电的时候调试针脚,不然会触电。这些物件一旦损坏,轻则黑屏,重则整块板子报废。这些道理大家都懂,但是真正实操的时候,尤其是每天重复同样操作的时候,很容易就忘掉一两次。

装完了树莓派,真正的挑战还在后面。

有摩擦与无摩擦

在把NFC模块装到树莓派的时候,第一步是先打开模块上一个叫I2C的小开关。这个开关极小。打开后,才能把线连接到树莓派的一排针脚上。然而,模块本身只有四个孔,如果想用线连接,还得把一个像蜘蛛一样的转接器安到模块上。这个转接器很松,就算线接对了,只要它一动,终端也会显示读取不到外接设备。而且要接线就必须打开盖子,盖子上的散热风扇也就吹不到CPU,过热后连接会断开,一切重来。

我自己在装的时候,因为I2C开关没有标明哪边是开,哪边是关,只能排列组合着试。都试了一遍,发现还是读不到设备。于是又怀疑是不是连接器松动,或者线材接触不良,都更换了一遍后,树莓派过热,直接断开了连接。

没办法,只能第二天再试。结果还是返回一样的几排横杠。就在我百思不得其解的时候,目光瞟到了散热器的两根线。谁能想到,它们早就占了原本属于NFC模块的针脚,我却一直没发现。

因为不管是哪个环节出了问题,它返回的都是几排横杠。

同样,在组装屏幕的时候,因为我鼠标的2.4G接收器和屏幕的USB线紧挨着,互相干扰,鼠标总是没反应。

在软件世界,绝大部分错误都是具体的、没有摩擦的。语法错了就是语法错了,缩进错了就是缩进错了,库需要更新了,也会给你提示。

然而在硬件世界,必须养成一步一个脚印排查的习惯,不能想当然地跳过步骤。不然很可能漏掉真正的原因。

反馈

之后的任务,基本就是手写代码和连接一个屏幕。

整个项目完成、刷卡成功的那一刹那,那种多巴胺的快感,是我写了很多软件之后再写一个所比不了的。

AI编程让软件开发变得简单高效,然而,它还不具备把手伸向现实世界的能力。在这种没有提示、或者只有模糊提示的领域,那些看起来有些老派的经验才能派上用场。

保持思考,保重。