这两天一直在折腾小智AI的开发板。前天在网上买了一套小智AI的散件,想着自己动手组装练练手。

  • 成功刷机

里面包括了 ESP32OLED 屏语音模块喇叭面包板跳线啥的。到手后鼓捣了几个小时,勉强拼好了,程序也烧进去了,OLED 正常显示。

搭好了的效果

结果插拔喇叭接口的时候,可能接口设计太差,几下就给搞坏了,喇叭直接没声音了,换也换不了

本来想着联系商家换个零件,结果刚好刷闲逛的时候又看到有卖小智AI整机的——成品,一个才 68,两个一共 110

算下来比我买散件组装的都便宜,就动了心思直接下单了两个(打算留一个、卖一个)。

但买完又有点后悔,毕竟加起来差不多花了 170 元 了。虽然有点积蓄,但第一次一下子花过这么多搞硬件也受不了,功能稳不稳定还不知道。

反复算了下账:

  • 散件那套成本 61 元,喇叭坏了还可以退
  • 成品下单两个,110 元,退货不包邮
  • 手头还有个 ESP8266 开发板(10 元入手),想着能不能把它拿来烧录测试一下小智AI的功能,省一个也不错

理论上,如果:

  • 成品留一个用,另一个能在闲鱼卖到 65 元
  • 散件那套退掉;

那我最后就只花了不到 50 元

于是计划是:

先别急着退,把 ESP8266 拿出来试试看能不能跑 OLED 显示。虽然 ESP8266ESP32 还是有差距,但先测个简单的功能看看能不能通。

测试内容设定很简单:

  • GPIO4(D2)GPIO5(D1)OLED,用 Wire.begin(4, 5) 初始化
  • 然后让 OLED 在屏幕正中循环倒计时显示 60 秒

中间遇到几个小坑:

  • Adafruit_GFX.h 没有安装,装一下库就好了
  • D2D1 编译报错,直接用 GPIO 编号就行
  • Wire.begin(4, 5) 后面漏了分号,编译失败
  • 烧录成功了,但 OLED 没有显示内容,估计是初始化顺序或者 I2C 地址的问题

最后多试了几次,成功在屏幕上显示倒计时和文字。

虽然是个很简单的测试,但感觉还是挺有意思的,起码手头的这些零件也不是白买的。


  • 经过了几次调试成功在屏幕上显示内容

下面是两个功能的完整示例,使用 ESP8266 + OLED屏(SSD1306),语言是 Arduino:


1. 屏幕输出 HELLO WORLD

#include <Wire.h>                    // I2C通信库
#include <Adafruit_GFX.h> // 基础图形库
#include <Adafruit_SSD1306.h> // SSD1306 OLED 屏幕驱动库 #define SCREEN_WIDTH 128 // OLED 宽度
#define SCREEN_HEIGHT 64 // OLED 高度
#define OLED_RESET -1 // 没有用到RESET引脚 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); void setup() {
Wire.begin(4, 5); // ESP8266的 D2 = GPIO4 (SDA), D1 = GPIO5 (SCL)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // 默认 I2C 地址 0x3C display.clearDisplay(); // 清空屏幕
display.setTextSize(2); // 字体大小(1~3)
display.setTextColor(SSD1306_WHITE); // 白色字体
display.setCursor(10, 20); // 设置文字位置
display.print("HELLO WORLD"); // 输出文字
display.display(); // 显示到屏幕上
} void loop() {
// 什么都不做
}

2. 屏幕倒计时 60 秒

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); int countdown = 60; // 倒计时起点 void setup() {
Wire.begin(4, 5); // D2 = GPIO4, D1 = GPIO5
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(3); // 大号字体
display.setTextColor(SSD1306_WHITE);
} void loop() {
if (countdown >= 0) {
display.clearDisplay(); // 每次都清空再写
display.setCursor(40, 20); // 居中位置大约是 (40,20)
display.print(countdown); // 显示数字
display.display(); // 推送到屏幕
countdown--;
delay(1000); // 等待 1 秒
}
}

结语:

不过说起来,我老早之前在尝试搭建一个像这样的智能AI了,比如这个

AI-Interactive-LLM-VTuber:https://github.com/toke648/AI-Interactive-LLM-VTuber

以及这个

基于自然语言的AI自动化终端:

也已经有人先做出来了(不行去贡献代码,别自己搞得了......)

因此看到有实际的产品被先创造出来,说实在的,有些不甘心。但是既然已经出来了那也不得不继续学习跟进,精进技术,争取更早的实现AI的全面集成化

小智AI的Github:https://github.com/78/xiaozhi-esp32

(浅看了下代码)

说起来这个东西支持集成各种第三方工具,非常适合用于集成开发出各种大型的AI产品

多模态模型+语言交互+长短记忆+情感检测(就差个视觉,已经完全算是一个小型大脑了)

可以预料到将会成为未来AI的基础外设,个人感觉非常有发展前景

除此以外也有很多设想:

  • 实时对话蓝牙耳机
  • AI智能AR眼睛(里面有一个内置的小型操作系统,能够操作实现各种任务)
  • 令AI能够自动操作系统终端,并能够打开第三方程序交互
  • 一个中央化集成的AI系统,能够适配各种环境,自动装载AI,能够同时控制多台设备及其他子AI
  • 认知系统架构
  • 自适应强化学习
  • 以及以上的所有集合

总之,路还很长,边走边看吧

5/21记录 —— ESP32小智ai的更多相关文章

  1. WinForm-简单21点纸牌小游戏

    纸牌游戏有很多种玩法,C#代码写的纸牌游戏,网上也能找到不少,从中也能学习到不少知识,自己动手也写一个,算是记录下学习过程吧. 纸牌21点的玩法也比较简单,就是看谁手中的所有牌相加是21点,或是离21 ...

  2. 物联网 软硬件系统 树莓派 单片机 esp32 小程序 网页 开发 欢迎相互交流学习~

    物联网软硬件开发 知识分享 多年学生项目开发经验 物联网 软硬件系统 树莓派 单片机 esp32 小程序 网页 开发 欢迎相互交流学习~ http://39.105.218.125:9000/

  3. MySQL 表记录查询小练习

    表记录查询小练习 查看岗位是teacher的员工姓名.年龄 查看岗位是teacher且年龄大于26岁的员工姓名.年龄 查看岗位是teacher且薪资在12000-16000范围内的员工姓名.年龄.薪资 ...

  4. 小智的糖果(Candy) 51nod 提高组试题

    luogu AC通道! (官方数据) 题目描述 小智家里来了很多的朋友,总共有N个人,站成一排,分别编号为0到N-1,小智要给他们分糖果.但 是有的朋友有一些特殊的要求,有的人要求他左右的两个人(左边 ...

  5. 小智的旅行(Bridge)51nod 提高组试题

    luogu AC传送门(官方数据) 题目描述 小智最喜欢旅行了,这次,小智来到了一个岛屿众多的地方,有N座岛屿,编号为0到N-1,岛屿之间 由一些桥连接,可以从桥的任意一端到另一端,由于岛屿可能比较大 ...

  6. Python 21 Django 实用小案例1

    实用案例 验证码与验证   KindEditor      组合搜索的实现 单例模式      beautifulsoup4 验证码与验证 需要安装Pillow模块 pip stall pillow ...

  7. 关于GitHub上传没有记录(小绿块不显示的问题)

    最近开始使用上github来上传保存自己在学习中所写过的代码,打算将自己每天的成果能有个保存,然后就利用上GitHub这么一个利器. 听说GitHub的那个绿块是用来记录每天的上传记录的,结果我将代码 ...

  8. 记录微信小程序里自带 时间格式 工具

    微信小程序里面自己给了一个时间工具,是用来记录log日志,感觉可以记录下来,所以拿来自己用,以此记录: 直接传入 日期对象 进入 formatTime //得到下面格式的时间格式2017/07/22 ...

  9. 小程序 AI/AR 能力

    一.关于 VisionKit 1.定义 VisionKit 为小程序提供了开发 AR 功能的能力,包含了 AR 在内的视觉算法. 2.版本 提供了 V1 和 V2 两个版本,区别如下: V1平面接口, ...

  10. [小细节,大BUG]记录一些小问题引起的大BUG(长期更新....)

    [小细节,大BUG] 6.问题描述:当从Plist文件加载数据,放入到tableView中展示时,有时有数据,有时又没有数据.这是为什么呢?相信很多大牛都想到了:我们一般将加载的数据,转换成模型,放入 ...

随机推荐

  1. Rust中的workspace

    java项目中用maven管理代码时,如果遇到大型工程,一般会拆分成不同的模块,比如spring-mvc中,通常会按model, view, controller建3个模块,然后根据一定的依赖关系进行 ...

  2. OpenList挂载「夸克网盘」

    存储->添加 选择夸克 填写挂载路径 打开并进入自己夸克网盘的网页端 [夸克网盘]夸克网盘PC网页版端入口 进入网盘后按F12进入开发者模式并找到网络模块 Edge.Google等浏览器操作基本 ...

  3. Win10纯净版如何设置待机不休眠的问题

    有深度技术官网的小伙伴说,每次他的win10纯净版系统电脑开着不操作,就会自动进入休眠状态,你说进休眠就进休眠,但是还无法唤醒.这也导致电脑又要重启,特别是电脑在下载大文件需要很长时间,又不能一直看着 ...

  4. 从频繁告警到平稳发布:服务冷启动 CPU 风暴优化实践

    作者:vivo 互联网服务器团队- Xie Xiaopeng 本文针对服务启动后几分钟内 CPU 持续处于高峰状态的问题,提出了自己的分析思路与解决方案.最终线上效果比较显著,成功解决了每次发版过程中 ...

  5. java 常见面试题系列之异常

    1.Exception和Error的区别 Exception和Error都继承自Throwable,在Java中只有Throwable类型的实例才可以被抛出或捕获.    Error指正常情况下不太可 ...

  6. ECharts数据可视化项目-笔记

    https://www.bilibili.com/video/BV1v7411R7mp 数据可视化主要目的:借助图形化手段,清晰有效传输和沟通信息:把冰冷的数字转为图形,揭示蕴含在数据中的道理和规律. ...

  7. Lambda表达式你真的懂了嘛

    一.Lambda 表达式介绍 Lambda 表达式是 Java 8 中添加的功能.引入 Lambda 表达式的主要目的是为了让 Java 支持函数式编程. Lambda 表达式是一个可以在不属于任何类 ...

  8. AX-MES生产制造管理系统-生产过程检验SPC(一)

    说起质量管理,那一定少不了 SPC,SPC中文名叫统计过程控制,对生产过程中记录的数据进行分析,及时了解不良情况出现的几率,并采取必要的措施达到消除影响的目的,这其中有几个关键术语,比如 UCL等. ...

  9. get请求数组参数问题(序列化)

    问题: 当我们需要通过get方式传递一个数组作为参数 tag:[1,2,3,4] 预期是解析为:https://www.cnblogs.com/enter?tag=1&tag=2&ta ...

  10. 免费可视化爬虫与自动化采集工具:易采集 EasySpider

    Hello大家好!我是助你打破信息差的开发者导航.今天给大家分享的开源项目是易采集 EasySpider,一个斩获41.6k星的可视化自动采集爬虫项目! 很多用户在数据采集和浏览器自动化测试时常常面临 ...