校园Wi-Fi被限速,消息发不出去,我们自己搭了个网。
没用手机热点,没连外网,三台ESP8266在实验室角落嘀嘀两声,就把聊天通了。
这玩意儿真不是吹的。我焊第一块板子时烫了手,屏幕亮起来那秒,室友正用安卓APP发“饿了”,我按两下确认键,OLED上就跳出“楼下食堂还开着”。不靠学校服务器,不走公网,数据只在我们自己架的树莓派里转。

老师说校园网管策略是硬性要求,不能开热点,不能装第三方AP。我们试过蓝牙,手机一锁屏,收不到回信。也试过微信局域网小程序,结果安卓12之后后台直接杀进程。后来翻到QuickChatBox的开源文档,发现它压根没想连互联网——设备自己当热点,别人连进来,消息就走HTTP轮询,服务器就跑在宿舍那台二手树莓派上。
板子选ESP8266EX,不是啥高大上的选择。它便宜、资料多、Arduino IDE烧录一次就能跑。有人非要用ESP32,说性能强,可我们真不需要跑语音识别,也不需要接摄像头。一个OLED、三个按键、一块小电池,够用了。充电电路用了TC4056A,配3kΩ电阻,实测400mA充起来不烫手,再大一点,充电芯片就喘粗气,自动降频。

固件写得有点糙,但能用。没上MQTT,光是Broker部署就卡住三天。后来全改成HTTP长连接,设备端就几行`WiFiClient`代码,服务器用Python写个轻量接口,接uwsgi挂Nginx后面,跑得比手机微信还稳。状态机写了四个阶段:配网、连服务器、等消息、处理消息。每个阶段都加看门狗,断了就自动重连,不卡死。
服务器装宝塔,不是图好看,是它改Nginx配置不用重启服务。我们OTA升级固件时,HTML页面要是断一秒,设备就找不到更新地址。数据库表也砍了又砍,用户删了,设备密钥和聊天记录全清掉,一点不留。消息表里就记“读没读”,不记时间,查起来快,轮询三秒一次,压力小。

Android APP是我写的,没用Flutter,就原生Java。DKey不是随便UUID,是把ESP8266的MAC地址加服务器时间戳、再混一个盐值,一起哈希出来的。重刷固件后旧Key绝对算不出来。快捷回复列表存在Redis里,带ETag版本号。设备连不上服务器?那就用本地存的三条老回复顶着,不空屏。
好友申请不是点一下就行。双方操作都变成事件,服务器慢慢写进库,客户端自己拉事件流合并状态。这样两人同时点“同意”,不会出现一个同意一个拒绝的鬼情况。

这板子还能干别的。OLED接上DHT22,就变温湿度屏;GPIO13接个继电器,能开关台灯;协议里加个`/api/v1/device/control`,发个JSON就能转舵机角度。不是吹扩展性,是真有人这么干了,去年隔壁电子社搞温控风扇,代码就抄了我们这段HTTP结构。
它不算高科技,没AI,没云同步,连推送都没有。但它让我第一次搞明白:网络不是运营商给的,是设备之间商量出来的。Wi-Fi信号在空气里飘着,谁都能发包,谁都能收,只要大家约好听哪段频率、怎么看懂字节——这事就成了。

烧录固件那晚,我电脑风扇响得像拖拉机。写完最后一行服务器代码,点了运行,手机APP弹出“连接成功”,板子OLED上跳了句“你好,我是Node-007”。
我喝了口凉透的冰红茶。
没截图,也没发朋友圈。




