【项目介绍】
夏天既然不能到平均温度40℃的室外蹦跶,那当然要造作一夏了!待在家里闲着也是闲着,就开开心心地吹吹电风扇吧。
可是,伸手按开关也要做工产生热量。因此,本项目准备只动口不动手,用语音控制开关电风扇。
【解决方案】
要使用语音控制,必须要有个好的语音接收设备,家里正好有个百度音箱就准备用它了。
因为百度音箱有个开发者技能的功能,所以本项目可以借助这个功能,打通网络。通过mqtt协议,控制物联网的风扇
【作品演示】
【制作过程】
1.使用百度音箱技能
发现在DuerOS 技能开放平台,选择一个好的技能名称太重要了。“造作一夏”不能识别,“清凉模式”不能识别,“论坛清凉一下”不能识别,
最终选用了“造物记清凉”作为技能名。。。好尴尬的名字
2.在调试的时候发现:什么意图中文名、意图标识名、常用表达、槽位标识、词典。。。这些专用名词太复杂,险些被绕晕
3.因为使用了别人开源的百度技能SDK,读懂代码花了很久。。。
4.本项目使用wifiduino作为主板,因为它用的是esp8266的芯片,引脚和主板接口刚开始没有仔细看对应,花了些时间填了个坑
。。。。。。
真是“纸上得来终觉浅,绝知此事要躬行”,真正操作的过程真是一把辛酸一把泪,不知道其他人是不是也和我有同样的感受
【总结】
因为6月份事情比较多,所以只能选择一个简单的模型来做PoC了。虽然百度音箱已经打通了很多物联网设备,但作为以造作、折腾为人生目标的笔者怎么能忍住不自己动手呢。希望后续能用百度音箱开发更多的个人技能,使之成为信息输入处理的一大帮手。
#include <ESP8266WiFi.h>
/* 依赖 PubSubClient 2.4.0 */
#include <PubSubClient.h>
/* 连接您的WIFI SSID和密码 */
#define WIFI_SSID "1*******"
#define WIFI_PASSWD "2*******"
/* 线上环境域名和端口号,不需要改 */
#define MQTT_SERVER "iot.dfrobot.com.cn"
#define MQTT_PORT 1883
#define MQTT_USRNAME "*******"
#define CLIENT_ID "kylin_dueros"
#define MQTT_PASSWD "*******"
#define MQTT_TOPIC "*******"
unsigned long lastMs = 0;
WiFiClient espClient;
PubSubClient client(espClient);
int fanPin = D7;
void callback(char *topic, byte *payload, unsigned int length)
{
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
payload[length] = '\0';
Serial.println((char *)payload);
JsonObject& root = jsonBuffer.parseObject(payload);
if (!root.success()) {
Serial.println("parseObject() failed");
return;
}
const char* status = payload;
Serial.println(status);
if(status[0] == '0'){
//Serial.println("off");
digitalWrite(fanPin, HIGH);
}else{
//Serial.println("on");
digitalWrite(fanPin, LOW);
}
}
void wifiInit()
{
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWD);
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.println("WiFi not Connect");
}
Serial.println("Connected to AP");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.print("espClient [");
client.setServer(MQTT_SERVER, MQTT_PORT); /* 连接WiFi之后,连接MQTT服务器 */
client.setCallback(callback);
}
void mqttCheckConnect()
{
while (!client.connected())
{
Serial.println("Connecting to MQTT Server ...");
if (client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD))
{
Serial.println("MQTT Connected!");
client.subscribe(MQTT_TOPIC);
}
else
{
Serial.print("MQTT Connect err:");
Serial.println(client.state());
delay(5000);
}
}
}
void setup()
{
// pinMode(SENSOR_PIN, INPUT);
/* initialize serial for debugging */
Serial.begin(115200);
Serial.println("Demo Start");
pinMode(fanPin, OUTPUT);
wifiInit();
}
// the loop function runs over and over again forever
void loop()
{
if (millis() - lastMs >= 5000)
{
lastMs = millis();
mqttCheckConnect();
}
client.loop();
}
鳄鱼2020.07.03
还不错哟!