当我们在学习和办公的桌面摆上绿植,确实能让空间多一份自然气息,但总感觉少了些能与人互动的“灵动”。本文将分享如何利用简单的开源硬件,打造一个专属的微型桌面灵魂伴侣——一个具备表情和感知能力的电子生命屏幕。
制作完成后的效果是怎样的呢?屏幕上会显示一对栩栩如生的大眼睛,它具备自动眨眼功能,看起来就像一个活着的电子生命。更重要的是,它的“眼神”可以切换不同的表情,如惊讶、悲伤等,展现出丰富的“情绪”。作品还集成了触摸传感器,当你触摸它时,它能感知到你的动作,并设置了“一摸就变开心”的交互逻辑。

一、硬件准备
1. 核心主控:D1 Mini
基于 ESP8266 芯片,作为整个项目的“大脑”,负责处理逻辑和驱动其他模块。

2. 显示模块:OLED 显示屏
这里使用的是 I2C 接口的 OLED 屏,用于显示眼睛的动画和表情。

3. 传感器:触摸传感器
用于检测用户的触摸动作,是实现人机交互的关键部件。

4. 其他
面包板、杜邦线、USB数据线(用于供电和上传程序)以及焊接工具(如需)等。
二、硬件连接
将 D1 Mini 和 OLED 屏幕 插入面包板。连接OLED屏时,请遵循以下引脚对应关系:
- OLED 的 SDA 引脚 → D1 Mini 的 D2 引脚
- OLED 的 SCL 引脚 → D1 Mini 的 D1 引脚 (这是 D1 Mini 的标准 I2C 引脚)
- OLED 的 VCC 引脚 → D1 Mini 的 3.3V 引脚
- OLED 的 GND 引脚 → D1 Mini 的 GND 引脚

接着连接触摸传感器。将传感器的信号引脚(通常标记为 SIG 或 OUT)连接到 D1 Mini 的 D5 引脚,同样需要连接传感器的 VCC 到 3.3V,GND 到 GND。


连线示意图
三、软件环境配置
- 安装 Arduino IDE:前往 Arduino 官网下载并安装最新版的 Arduino IDE。
- 添加开发板支持:打开 Arduino IDE,进入“文件 -> 首选项”,在“附加开发板管理器网址”中添加 ESP8266 的板支持地址:
http://arduino.esp8266.com/stable/package_esp8266com_index.json。然后通过“工具 -> 开发板 -> 开发板管理器”搜索并安装 “esp8266”。
- 安装核心库:这是一个关键步骤。在 Arduino IDE 的库管理器中(项目 -> 加载库 -> 管理库),搜索并安装由 Flux Garage 开发的 “Robo Eyes” 库。这个优秀的开源项目库封装了复杂的眼睛动画逻辑,将极大降低我们的编程难度。
四、编写并上传代码
第一步:屏幕点亮测试
首先,我们编写一个简单的程序来确保硬件连接正确,屏幕能够正常点亮。在 Arduino IDE 中新建一个项目,输入以下代码并上传到 D1 Mini。
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
// put your setup code here, to run once:
Wire.begin(D2, D1);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)){
// 初始化失败,程序停在这里
while(1);
}
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(0,0);
display.print("Testing Display");
display.display();
}
void loop() {
// 空循环
}
上传成功后,你应该能在OLED屏幕上看到“Testing Display”的字样。

第二步:运行眼睛动画示例
现在,打开我们安装的 Robo Eyes 库自带的示例代码。路径为:文件 -> 示例 -> Robo Eyes -> i2c_SSD1306_Basics。
将这个示例代码直接上传到开发板,你就能看到一双会自主眨眼的大眼睛了!

你还可以尝试上传另外一个示例 “i2c_SSD1306_AnimationSequence”,它能展示更丰富的情绪动画序列。

第三步:加入触摸交互逻辑
最后,我们需要编写核心代码,将触摸传感器的信号与眼睛表情联动起来。下面的代码实现了:平时眼睛处于默认状态并自动眨眼;当触摸传感器被触发时,眼睛会切换为“开心”表情,并停止自动眨眼,同时眼球会左右平滑移动,形成“看你”的交互效果。
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <FluxGarage_RoboEyes.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define TOUCH D5
static unsigned long touchedTime = 0;
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
RoboEyes<Adafruit_SSD1306> roboEyes(display);
bool moveNE = true;
void setup(){
pinMode(TOUCH, INPUT);
Wire.begin(D2, D1);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
while (true);
}
roboEyes.begin(SCREEN_WIDTH, SCREEN_HEIGHT, 100);
roboEyes.setPosition(DEFAULT);
roboEyes.setMood(DEFAULT);
roboEyes.setAutoblinker(ON, 3, 2);
roboEyes.setIdleMode(ON, 2, 2);
touchedTime = millis();
}
void loop(){
bool touched = digitalRead(TOUCH);
unsigned long now = millis();
// ========= TAP / TOUCH =========
if (touched == HIGH) {
roboEyes.setMood(HAPPY);
roboEyes.setAutoblinker(OFF);
roboEyes.setIdleMode(OFF);
// smooth NE <-> NW movement
if (now - touchedTime > 150) {
touchedTime = now;
if (moveNE) {
roboEyes.setPosition(NE);
} else {
roboEyes.setPosition(NW);
}
moveNE = !moveNE;
}
}
// ========= NORMAL IDLE =========
else {
roboEyes.setMood(DEFAULT);
roboEyes.setAutoblinker(ON, 3, 2);
roboEyes.setIdleMode(ON, 2, 2);
// DO NOT force setPosition(DEFAULT)
}
roboEyes.update();
}
将上述代码上传后,你的桌面电子眼睛就拥有了“触觉”。触摸它,看看它是否会开心地看向你吧!

五、进阶思路与结束语
这个项目非常适合作为 物联网(IoT) 和 AI 终端交互的入门级硬件实验。它的可扩展性很强,你可以在此基础上进行无限升级。
一个有趣的设想是:将 D1 Mini 连接至Wi-Fi网络,然后接入大型语言模型的 API。通过触摸传感器触发语音识别模块,让这个“小眼睛”机器人不仅能变换表情,还能通过语音回答你的问题,从而进化成一个真正的“桌面 AI 助手”。这正是在 开源实战 中探索智能硬件与AI结合的一个绝佳起点。
希望这个项目能为你枯燥的桌面带来一丝生机与乐趣,也点燃你动手创作的热情。欢迎在 云栈社区 分享你的制作成果和修改创意,与更多开发者交流硬件编程的乐趣。