找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1006

积分

0

好友

130

主题
发表于 9 小时前 | 查看: 2| 回复: 0

当我们在学习和办公的桌面摆上绿植,确实能让空间多一份自然气息,但总感觉少了些能与人互动的“灵动”。本文将分享如何利用简单的开源硬件,打造一个专属的微型桌面灵魂伴侣——一个具备表情和感知能力的电子生命屏幕。

制作完成后的效果是怎样的呢?屏幕上会显示一对栩栩如生的大眼睛,它具备自动眨眼功能,看起来就像一个活着的电子生命。更重要的是,它的“眼神”可以切换不同的表情,如惊讶、悲伤等,展现出丰富的“情绪”。作品还集成了触摸传感器,当你触摸它时,它能感知到你的动作,并设置了“一摸就变开心”的交互逻辑。

一个显示卡通表情的机器人头部装置

一、硬件准备

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

ESP-12F模块特写照片

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

OLED显示屏模块

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

TO-92封装三极管

4. 其他
面包板、杜邦线、USB数据线(用于供电和上传程序)以及焊接工具(如需)等。

二、硬件连接

D1 MiniOLED 屏幕 插入面包板。连接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 引脚

ESP8266模块通过杜邦线连接到面包板

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

完整的电路搭建图,包含ESP8266、OLED和按钮

硬件连接示意图
连线示意图

三、软件环境配置

  1. 安装 Arduino IDE:前往 Arduino 官网下载并安装最新版的 Arduino IDE。
  2. 添加开发板支持:打开 Arduino IDE,进入“文件 -> 首选项”,在“附加开发板管理器网址”中添加 ESP8266 的板支持地址:http://arduino.esp8266.com/stable/package_esp8266com_index.json。然后通过“工具 -> 开发板 -> 开发板管理器”搜索并安装 “esp8266”。
  3. 安装核心库:这是一个关键步骤。在 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”的字样。

屏幕显示Testing Display的电路图

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

屏幕显示蓝色矩形块的OLED眼睛

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

Arduino IDE中打开示例代码的界面

第三步:加入触摸交互逻辑
最后,我们需要编写核心代码,将触摸传感器的信号与眼睛表情联动起来。下面的代码实现了:平时眼睛处于默认状态并自动眨眼;当触摸传感器被触发时,眼睛会切换为“开心”表情,并停止自动眨眼,同时眼球会左右平滑移动,形成“看你”的交互效果。

#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结合的一个绝佳起点。

希望这个项目能为你枯燥的桌面带来一丝生机与乐趣,也点燃你动手创作的热情。欢迎在 云栈社区 分享你的制作成果和修改创意,与更多开发者交流硬件编程的乐趣。




上一篇:网络安全学习如何“以少胜多”?给新手的高效入门心得
下一篇:Polars 大数据处理新手教程:比 Pandas 快,筛选与聚合实战解析
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-3 18:22 , Processed in 0.284457 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表