
上周帮隔壁工位刚学易语言的小兄弟调代码,他折腾了三天想做个能输文字指令开家里台灯的小工具,踩的坑能列半页纸,我把完整步骤拆出来,照着敲就能跑。
先把基础环境搭好
- 准备易语言5.9及以上版本,只勾选核心支持库、互联网支持库即可,安装时别选附带的捆绑插件。
- 准备一块刷好ESPHome固件的ESP8266模块,接好继电器连到待控制的家电,确保和电脑在同一局域网,记好设备的本地Web控制地址,用浏览器访问能正常开关设备就算调试到位。
- 本地安装Ollama,拉取qwen2:0.5b模型即可,模型体量轻,普通办公电脑就能流畅跑,不用一开始就折腾需要鉴权的在线API。
别一上来就去对接需要签名鉴权的在线大模型接口,新手很容易卡在加密规则、跨域限制那步劝退,先拿本地无鉴权的接口把逻辑跑通,后面换什么接口都容易。
写对接本地AI的核心逻辑
说白了这部分逻辑很简单,就是把用户输入的指令丢给本地大模型,让它判断是要开设备还是关设备,直接返回明确的标识就行,不用搞复杂的意图识别训练。核心代码直接抄就行:
.版本 2
.支持库 internet
.子程序 取AI识别结果, 文本型
.参数 用户指令, 文本型
.局部变量 提交数据, 文本型
.局部变量 返回文本, 文本型
提交数据 = "{\"model\":\"qwen2:0.5b\",\"prompt\":\"用户指令是'" + 用户指令 + "',如果是开设备返回1,关设备返回0,只输出数字不要其他内容\",\"stream\":false}"
返回文本 = 到文本 (HTTP读文件 ("http://127.0.0.1:11434/api/generate", 1, 提交数据, ))
.如果真 (寻找文本 (返回文本, "\"response\":\"1", , 假) ≠ -1)
返回 ("开")
.如果真结束
返回 ("关")
打通硬件控制的最后一步
拿到AI返回的开关状态之后,只要给ESP8266的Web接口发个对应的GET请求就行,代码比AI对接部分还简单:
.子程序 控制设备开关
.参数 操作状态, 文本型
.如果 (操作状态 = "开")
HTTP读文件 ("http://你的ESP设备本地地址/switch/desk_lamp/turn_on")
.否则
HTTP读文件 ("http://你的ESP设备本地地址/switch/desk_lamp/turn_off")
.如果结束
这里有个新手常踩的坑:易语言的HTTP读文件是阻塞操作,别把这段代码放在周期太短的时钟事件里,不然界面会直接卡住,操作后加个几百毫秒的延迟就稳。
最后在界面上拖一个输入框、一个触发按钮,点按钮的时候依次调用上面两个子程序就行,整个工具加起来不到30行代码。
反正我把这段代码给小兄弟的时候他十来分钟就跑通了,要是调的时候遇到返回内容乱码,记得把HTTP返回的内容转成GBK编码就行,多大点事。
评论一下?