前段时间,无意中在头条看到了Blinker+小爱同学的演示视频,觉得挺有趣的,于是就开始了我的探索之路;
本人从事硬件设计,鉴于之前有过一些ESP32的开发,恰好手头有一块闲置的板子,然后就开始了踩坑之路,本文会以我自己的经历,尽可能详细的描述各个节点的配置,调试方面的工作,防止大家踩坑。
一、准备工作
1.1 搭建软件开发环境
·Arduino IDE :***/arduino-1.8.12-windows.exe 【如果觉得速度慢,可以拷贝链接到迅雷下载】
附上百度网盘链接:***/s/1XBxhn1eU9V7DSQa0VBB8rg 提取码:2qwm
·安装blinker 资源库:安装好Arduino IDE后,依次打开【项目】-【加载库】-【库管理器】-搜索【Blinker】,选择第一个By 【i3Water】0.3.3版本安装
安装速度可能会有点慢,耐心等待即可,不要中途取消,否则可能会导致文件校验出错; 安装完成后可以在【文件】-【示例】-【第三方示例】找到安装的库
.默认安装路径在 C:Users你的电脑名字DocumentsArduinolibrariesBlinker ;实在无法下载的同学可以尝试手动解压,不过个人建议还是通过IDE下载
附上百度网盘链接:***/s/1Jstu0NpPpuz8KFWOJEvUjQ 提取码:p7ip
·安装ESP8266/ESP32扩展包:依次打开【文件】-【首选项】-【附加开发板管理器网址】,点击右边的小窗口图标
输入如下信息:***/dl/package_esp32_index.json
***/stable/package_esp8266com_index.json
本来这个文件也是可以通过Git或者其他途径获取的,然后解压到:C:Users你的电脑名字AppDataLocalArduino15packages 下即可。
**但是本人测试发现,其他途径获取的扩展包,然后解压到指定的位置后,
在Arduino IDE上没有问题,但是在VScdoe环境中找不到开发板信息,无法继续玩耍了!
所以建议通过Arduino IDE 【工具】-【开发板管理器】-【搜索ESP32或者ESP8266】进行下载,速度会有点慢,建议早上6点左右下载,这时候速度会比较快;
另外下载过程中千万不要点击停止,或者取消,一旦取消后软件容易卡死,重新打开软件后,看似可以断点续传下载,但是实际上下载完成后直接会报校验错误,需要重新下载;
·安装VsCode开发环境及Arduino插件:***/download 直接下载自己需要的版本,安装即可。
之后安装Arduino插件:在左边功能栏中选择应用商店,输入 Arduino 选择Microsoft的那个插件下载即可
接着设置一下插件的相关信息,依次点击【文件】-【首选项】-【设置】,在搜索设置框中输入 Arduino ,在结果中点击 在Setting.json中编辑
在这里输入你的Arduino IDE的安装路径,到文件夹那一项就可以截止,不需要精确到Arduino.exe ;
【注意一定需要英文字符】我的另外一项是自动保存参数,不要的可以忽略
{
"arduino.path": "D:/Design/Arduino",
"files.autoSave": "afterDelay"
}
到此位置,软件配置就完成的差不多啦;
1.2 选择合适的硬件环境
我这里用的是自己设计的一个小板子,大家有需要可以去买乐鑫的官方开发板:***/item.htm?spm=a1z10.3-c-s.w4002-22443450239.17.45d619b0nNhX2U&id=542143157571 【这里没有打广告的意思,大家可以自行选择适合自己的】
不同的开发板就是外设链接以及IO定义不一致,后期可以自行修改
接下来我们去打开一个示例程序:
使用VsCode的 【文件】-【打开文件夹】,选择C:Users你的电脑名字DocumentsArduinolibrariesBlinkerexamplesBlinker_Hello里的Hello_WiFi 文件夹
之后点击软件的右下方Selece Board 选项,然后选择一个适合你的开发板,将板子链接至电脑,装好串口驱动,获取到自己的端口号 我这里也是随便选了一个板子,然后根据我自己的参数选择配置,各位不清楚自己硬件配置的可以去问购买的店家
然后按照套路,或者网上的其他教程你肯定会去点击编译,下载了;这时候的你可能会发现串口无法打开,怎么点都没有反应【当然串口驱动必须装好的,而且串口也存在】
别着急,因为楼主也遇到了这种坑,待我慢慢道来
先找到你打开的编辑器,注意HELLO_WIFI 下方有一个ino文件,同时还有一个vscode 的配置文件,可能很多新用户没有这个文件,那也别着急,去任意地方拷贝一个,或者新建一个
然后打开arduino配置文件,输入以下信息,端口号就是你的电脑实际端口号,输入正确后就可以点击编译,下载程序了;
{
"board": "esp32:esp32:esp32",
"configuration": "PSRAM=disabled,PartitiOnScheme=default_8MB,CPUFreq=240,FlashMode=dio,FlashFreq=80,FlashSize=8M,UploadSpeed=115200,DebugLevel=none",
"port": "COM3"
}
另外还有一个c_cpp_properties.json的配置文件,输入以下信息,其中第一个是你Blinker库的位置,下面两个是ESP32和ESP8266的扩展位置,方便后续程序跳转
这个Arduino IDE 无法跳转的问题实在是坑,用惯了跳转的我,第一次入手都不知道程序的参数和函数都是写些啥
{
"configurations": [
{
"name": "Win32",
"includePath":
[
"C:\Users\Dhg-PC\Documents\Arduino\libraries\Blinker\**",
"C:\Users\Dhg-PC\AppData\Local\Arduino15\packages\esp32\tools\**",
"C:\Users\Dhg-PC\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\**"
],
"forcedInclude": [],
"intelliSenseMode": "msvc-x64"
}
],
"version": 4
}
接下来我们开始改造一下Hello_WiFi的例程,然后试一下用APP创建一个开关按钮,来控制一个LED灯的亮灭;
【App下载注册流程舍去。。。】
App端配置流程简略带过如下:【右上角添加】-【DIY设备】-【Arduino】-【WIFI接入】-【记住提供给你的Key】,然后返回我的设备,
这时候点击右上角的编辑,在下方菜单栏中选择添加一个按键,点击按键进入基础设置;数据键名为:btn-red(需要与代码保持一致),按键类型为:开关按键
其余自行设置后,保存配置;
代码更改如下:
#define BLINKER_WIFI
#include <Blinker.h>
char auth[] = "Your Device Secret Key";
char ssid[] = "Your WiFi network SSID";
char pswd[] = "Your WiFi network password";
// 新建按钮组件
BlinkerButton Button("btn-red"); //此处名字和你app上按钮保持一致
#define GPIO_RED_LED 5 //定义LED引脚的IO口,需要保持和你的硬件IO一致
// 按下按键即会执行该函数
void button_callback(const String & state) //这是按键的回调函数
{
BLINKER_LOG("get button state: ", state); //获取按键的状态,打印
if (state == BLINKER_CMD_ON) //如果收到ON信号
{
digitalWrite(GPIO_RED_LED, LOW); //将LED灯IO拉低,对于低有效的LED灯点亮,
BLINKER_LOG("Open red Success "); //如果是高有效需要将LOW改为High
Button.print("on"); //给App返回状态信号,方便后续关闭;
}
else if (state == BLINKER_CMD_OFF) //如果收到OFF信号
{
digitalWrite(GPIO_RED_LED, HIGH);
BLINKER_LOG("Close red Success ");
Button.print("off");
}
}
//初始化函数
void setup()
{
// 初始化串口
Serial.begin(115200); //设置波特率115200
BLINKER_DEBUG.stream(Serial);
// 初始化有LED的IO
pinMode(GPIO_RED_LED, OUTPUT);
digitalWrite(GPIO_RED_LED, HIGH); //将LED灯引脚初始化为高,关闭LED灯;
// 初始化blinker
Blinker.begin(auth, ssid, pswd);
Button.attach(button_callback); //注册按键的回调函数
}
void loop()
{
Blinker.run(); //循环函数
}
然后选择下载,等待设备上线之后,就可以直接用按钮或者语音控制设备了;接下来如果要让小爱音箱控制那要怎么办呢;首先要更改代码,添加支持小爱的控制接口;
#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT //小爱函数接口
#define BLINKER_PRINT Serial //小爱函数接口
#include <Blinker.h>
char auth[] = "Your Device Secret Key";
char ssid[] = "Your WiFi network SSID";
char pswd[] = "Your WiFi network password";
// 新建按钮组件
BlinkerButton Button("btn-red"); //此处名字和你app上按钮保持一致
#define GPIO_RED_LED 5 //定义LED引脚的IO口,需要保持和你的硬件IO一致
// 按下按键即会执行该函数
void button_callback(const String & state) //这是按键的回调函数
{
BLINKER_LOG("get button state: ", state); //获取按键的状态,打印
if (state == BLINKER_CMD_ON) //如果收到ON信号
{
digitalWrite(GPIO_RED_LED, LOW); //将LED灯IO拉低,对于低有效的LED灯点亮,
BLINKER_LOG("Open red Success "); //如果是高有效需要将LOW改为High
BlinkerMIOT.powerState("on"); //给小爱返回状态信号,
BlinkerMIOT.print(); //发送状态信号
}
else if (state == BLINKER_CMD_OFF) //如果收到OFF信号
{
digitalWrite(GPIO_RED_LED, HIGH);
BLINKER_LOG("Close red Success ");
BlinkerMIOT.powerState("off");
BlinkerMIOT.print();
}
}
//初始化函数
void setup()
{
// 初始化串口
Serial.begin(115200); //设置波特率115200
BLINKER_DEBUG.stream(Serial);
// 初始化有LED的IO
pinMode(GPIO_RED_LED, OUTPUT);
digitalWrite(GPIO_RED_LED, HIGH); //将LED灯引脚初始化为高,关闭LED灯;
// 初始化blinker
Blinker.begin(auth, ssid, pswd);
BlinkerMIOT.attachPowerState(button_callback);//注册小爱控制的回调函数
}
void loop()
{
Blinker.run(); //循环函数
}
然后需要将点灯App与小爱音箱进行关联,
打开米家App-选择下方【我的】-【其他平台设备】-【添加】-【点灯科技】-【登录账号】-【同步账号】
你就可以找到你的设备了,之后就可以用小爱同学控制开灯与关灯了;
当然如果你想又要按键控制,也需要小爱控制,你就做两个函数,分别注册一下回调函数就可以啦;
或者更加直接 两个函数写一个也可以的;
本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:dandanxi6@qq.com