R1BBIT 把一块 ESP32 开发板变成一台成品联网设备——不需要工具链,不需要自建服务器,也不用写一行 C。
它特别适合三件事:让产品快速做到第一个能用的版本;在真正投入之前先验证想法是否成立;学习电子与机器人技术——尤其适合从零开始的人。
目录里列的是我们逐块验证过的硬件,但整套生态几乎可以跑在任何 ESP32 上。
固件里带着一个解释器,所以板子运行的是一份纯文本文件,而不是编译好的二进制。它的 298 条命令涵盖引脚、传感器、显示屏、声音、摄像头和网络——没有 C,没有工具链,也不用编译。
在浏览器里写,每条命令都有自动补全,还有边打字边发现错误的检查器。助手能替你写脚本或修脚本,现成示例库让你不必面对空白页。就连第一次烧录也在这里完成,用一根 USB 线。
开发板会自己通过加密通道连上来。读数被保存下来并画成图表,新的脚本和固件通过无线送达,每台设备都有一个你随时随地都能打开的控制台和文件管理器。
开发板发布的数值会变成手机上的一块磁贴;在那里拖动滑块,开发板就会响应。应用里还带着编辑器、控制台、文档和同一个助手——出问题时它还能给你打招呼。
CONFIG
PSRAM_SIZE 8
PSRAM_TYPE OCTAL
I2C_SDA 16
I2C_SCL 15
SPI_MOSI 11
SPI_MISO 13
SPI_CLK 12
DISPLAY_DRIVER ILI9341
DISPLAY_CS 10
DISPLAY_DC 46
DISPLAY_BL 45
DISPLAY_WIDTH 320
DISPLAY_HEIGHT 240
TOUCH_DRIVER FT6x36
TOUCH_INT 17
END_CONFIG
DISPLAY_INIT
DISPLAY_WIDGET(1, "label", 20, 24, 280, 36)
DISPLAY_WIDGET(2, "arc", 90, 76, 140, 140)
VAR T, F
VAR A[1]
DS1820_INIT(A, 1000)
VARS_PUBLISH(T, F)
WHILE(1)
T = A[0]
F = T * 9 / 5 + 32 ' to Fahrenheit
UI_TEXT(1, "Temperature " + T + " C")
UI_VALUE(2, T)
IF T > 30 THEN SEND_NOTIFY("Greenhouse", "Too hot: " + T)
PAUSE 1000
WEND
网页烧录器通过 USB 从浏览器写入固件。不用工具链,也不用到处找驱动。
在网页 IDE 或手机应用里——带自动补全、就地显示的参数提示,以及边打字边校验参数类型的检查器。
点击 Run,几秒钟脚本就到了开发板上:通过空中传输、走加密链路,无需任何数据线。脚本也可以来自 SD 卡或串口控制台。开发板把它保存在 Flash 中,AUTOSTART 会在下次上电时再次运行它。
现在你能看到它在干活:读数大约每秒一次送到面板和你的手机,终端里显示脚本打印的一切。哪里不对,改一行再发一次就是了。与此同时开发板还在不断获得新命令,因为固件升级同样通过空中传输送达。
如果你是从 Arduino IDE 进入 ESP32 的,你清楚每一次改动的代价:重新编译、插上数据线、重新烧录,来回折腾直到逻辑稳定。Blynk 和 Arduino Cloud 给了你面板和云端,但底下的逻辑仍然是 C++,每改一次都要重新构建、重新上传。R1BBIT 把控制权留给你,同时去掉了重新构建:逻辑是开发板读取的一个文本脚本,而面板不过是它发布的那些变量。
你的程序是一份文本文件,板子读它、跑它。在浏览器里改一行,发到板子上,立刻生效——固件本身从不改变。连接线也是用文字描述的:换屏幕或者把传感器挪到别的引脚,是一次编辑,而不是一次重新编译。
用 Arduino IDE 时,每一次改动都要走一遍编译加插线重烧的循环。
没有什么要安装,也没有什么要托管。设备出厂就连上 cloud.r1bbit.com,遥测落进时序数据库并自动画成图表,每台设备都有远程终端和文件管理器。需要互联网上的数据?HTTP_GET 直接从板子取回来——中间不隔任何东西。
用 Blynk 或 Arduino Cloud,面板是现成的,但背后的 sketch 依然是 C++,每改一次都要重新构建并上传。
把设备该做的事描述出来,内置助手就会为它写出 R1BBIT-BASIC。它看得到你已有的脚本,所以能在上面继续写、解释某条命令,或者帮你找出怎么也找不到的那个错误。网页 IDE 和手机应用里都有它。
通用聊天机器人会毫不迟疑地编出这门语言从来没有过的命令。
27 种控件直接绘制在设备自己的屏幕上:图表、仪表盘、滑块,甚至 OpenStreetMap 地图块。发布一个变量,它就成为手机应用里的一块磁贴;在那里拖动滑块,开发板上的 ON_VAR 就会触发。推送通知只需一条命令。
实际上只有一步:在手机应用里添加一个组件并指定一个变量,设备就会自动订阅它并开始发送数据。
解释器与固件相互隔离。运行时出错只会停下脚本;板子保持连接,并通过无线接收你的修正。
除主循环外最多 15 个后台任务,共享变量,协作式调度——不用写 RTOS 代码。
接上一个 SIM 模块,Wi-Fi 断线时遥测、终端和脚本下发照样不中断。
播放 MP3 和音轨音乐、录音、做 FFT、把摄像头画面推到浏览器或另一块板子。
16 个章节,每条命令都附参数说明和示例,提供英语、俄语、西班牙语、法语和德语版本。
IDE 内置的官方模板库,以及一个分享脚本和接线方案的论坛。
嵌入式开发很少只是写代码。文件要传到板子上,图片要转成屏幕真正读得懂的格式,字体要塞进 Flash——还有很多东西根本不该落到板子上。这些都在与编辑器同一个浏览器标签页里:不用另装工具,也不用来回插拔 SD 卡。
打开设备文件对话框,你看到的就是某块板子的 Flash,而它可能在另一栋楼里。可以浏览、把文件拖进窗口上传、把文件取回来、重命名、删除、新建目录——还能把正在编辑的脚本直接存到设备上。剩余空间的指示条会告诉你,在塞进一个大字体或一段声音之前还剩多少。
一块开发板的 Flash 不到一兆字节——一张照片就能吃掉一半。所以把素材留在云端:文件上传一次,起个短名字,在脚本里写上这个名字并加个 @ 前缀。脚本需要时开发板才去取,按脚本要求的尺寸取,而且什么都不留存。
打开一张图,裁剪、涂改,选好屏幕需要的色深——结果既可以作为数组贴进脚本,也可以作为文件直接发到板子上。下方的计数器会在你动手前就告诉你它要花多少字节。
载入任意 TTF 字体,挑选要保留的字符范围,再逐像素手工修好那个别扭的字形。下方那行会统计它将占用的内存——当其中大部分是空白时还会提醒你,而这正是字体塞不下的常见原因。
把画布设成你屏幕的尺寸,然后把标签、按钮、滑块、仪表盘、图表和列表拖上去,在网格上排好。按一下按钮,就得到画出这块屏幕的脚本——它还能反过来读取已有脚本,所以布局以后还能再改。
音轨模块在浏览器里和在板子上一样能放。打开一个,你会看到带全部音符和效果的音序网格、通道列表和所有采样——在这里改好,同一个文件就能从你的脚本里放出来。
一段视频会变成一条可以逐帧编辑的胶片:在某一帧上涂画、复制它、剪掉一段。然后压缩到小屏幕吃得下的程度:带抖动的一位黑白,或者压缩后的彩色。
把一段音频拖进来就能看到波形:选一段、剪掉、只留需要的部分。然后选码率,下面那行会提前告诉你代价——一首两分半的曲子从 15 MB 降到 1.3 MB,小到可以直接存在板子上。
你在这里做出来的东西,要么直接送到板子上,要么留在服务器上,让脚本按名字去取。
手机应用不是最后加上去的遥控器,而是和浏览器一样完整的工作流。搭建面板、编写和修改脚本、在开发板和手机之间搬运文件、打开终端、查看实时数值、阅读文档、向助手提问。登录之后,账号下的所有设备都已经在那里。
编辑器
控件
终端 在单片机上做音视频,通常意味着编解码器、缓冲区和一周的数据手册。在这里它们就是命令。收音机、摄像头画面、开发板与手机之间的对讲通道——每一样都只需几行,流量由云端承担。
让命令指向 Flash 里的文件、服务器上保存的文件,或者直接指向一个网络电台——板子会解码并播放。它还能告诉你此刻正在播什么,因为它读得到电台的曲目信息。
VAR title$
PLAY_AUDIO("https://mangoradio.stream.laut.fm/mangoradio")
WHILE 1
AUDIO_TITLE(title$)
PRINT "Now playing: " + title$
PAUSE 5000
WEND
把几块板子放进同一个房间,它们就能互相听见。按住说话,松开收听。手机也能进同一个房间,于是设备和人落在同一条通道上——工坊、大门、地块尽头的温室,都用得上。
CONFIG
IN1 4
IN1_PULL UP
END_CONFIG
JOIN_AUDIO_ROOM("myteam", 16)
WHILE 1
IF IN1 = 0 THEN PTT(1)
IF IN1 = 1 THEN PTT(0)
PAUSE 50
WEND
开一个视频房间,摄像头就上线了。可以在手机应用或浏览器里观看,另一块带屏幕的板子也能以观众身份进入同一个房间——门铃把自己显示在厨房的面板上,中间不需要你自己的服务器。
CAM_INIT
CAM_RESOLUTION(320, 240)
START_VIDEO_ROOM("frontdoor", 10)
// on the board with the screen:
// JOIN_VIDEO_ROOM("frontdoor")
语音和视频走低延迟通道,被阻断时会自动切换备用路径。声音这边还提供音符与旋律播放、音轨模块、WAV 和 MP3 录音,以及实时频谱分析。
全部音频与视频命令固件面向六个目标编译:ESP32-S3、ESP32-P4、ESP32-C6、ESP32-C3、经典 ESP32,以及不带 PSRAM 的 S3。下面这些开发板是我们亲手验证过的。带一块同系列的开发板来,它照样有自己的 CONFIG 配置块。
参考平台——新功能最先出现在这里
The big-screen one
极小体积里的 Wi-Fi 6
The smallest and cheapest
也为经典 ESP32(D0WD)和不带 PSRAM 的 ESP32-S3 编译:语言相同,云端相同,外设少一些。
这套生态今天就可以用于商业项目。在 ESP32 上做出一台设备,桌上第一块板所用的固件、云端和应用,同样能撑起现场的一百台。项目不再只是爱好的那一天,没有任何东西需要重写。
R1BBIT 跑在普通分销商成批供货的标准 ESP32 模组上。从一台到一千台是采购问题,不是重新设计,而且同一个脚本在每一台上都能跑。
改好的脚本或新构建的固件通过空中升级一次发给所有开发板。没有人需要带着笔记本和数据线跑现场。
每台设备都把读数写入云端,按设备分开保存,随时可以画出几个月前的曲线。不用写后端,也不用运维数据库。
iOS 和 Android 应用已经上架、随时可用。设备归属于机主的账号,它的组件会自动出现在那里——没人需要再做第二个应用。
设备绑定到账号,它与云端交换的一切——遥测、命令、脚本和固件——都走加密链路。
目录里是我们逐块验证过的硬件,但固件可以编译到六个 ESP32 目标上,所以你自研的板子同样能加入这套生态。
制冷设备与冷库的运行统计、楼宇采暖与空调、车间和温室的监测——背后都是同一套系统。
R1BBIT 商业方案初学者与单片机相处的第一天,大半时间都花在与编程无关的事上:装环境、找驱动、在菜单里选板子、等编译。R1BBIT 把这一天去掉了。一个浏览器、一块便宜的开发板和一根 USB 线——这一节课的前半段学生就在写逻辑,而不是等到第三节课。
CONFIG
OUT1 2
END_CONFIG
WHILE 1
OUT1 1
PAUSE 500
OUT1 0
PAUSE 500
WEND
CONFIG
I2C_SCL 7
I2C_SDA 6
END_CONFIG
VAR T, H
SI7021_INIT(T, H, 2000)
WHILE 1
PRINT "temp " + T + " hum " + H
PAUSE 2000
WEND
CONFIG
I2C_SCL 7
I2C_SDA 6
END_CONFIG
VAR T, H
SI7021_INIT(T, H, 2000)
VARS_PUBLISH(T, H)
WHILE 1
IF T > 27 THEN
SEND_NOTIFY("Too warm", STR$(T) + " C")
ENDIF
PAUSE 60000
WEND
这里的每个脚本都是完整的程序——没有隐藏的配置文件,也没有工程需要设置。
一切都在浏览器里进行:没有管理员权限的校园电脑上、笔记本上,甚至平板上。不用下载,不用授权,也不会出现只在教室某一台机器上能跑的版本。
命令本身就说明了它在做什么:DHT_INIT、PRINT、PAUSE、IF … THEN。学生读一行就懂一行,于是课堂可以讲循环和条件,而不是分号和花括号。
脚本运行在隔离的解释器里。写错一行会让它停下并说明原因;板子照常工作,一秒之后就能接受修正。硬件不会变砖,课也不会白上。
支持的最小芯片只要几美元,一块板子加一个传感器就已经是个能跑的项目。给整个班配一套,不需要专门申请经费。
不需要管理员权限,不需要授权,也没有需要谁去维护的机房镜像。
文档提供英语、俄语、西班牙语、法语和德语版本。
一块开发板只需接入云端一次,这次激活自带三个月的 Starter。之后你可以选择套餐,也可以留在免费版——开发板照样工作。
价格按账号计,单位美元,直接取自我们的计费系统。按年付费比十二次月付更便宜。免费版完全不需要绑卡。
