所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开
#造作一夏#动口不动手的夏天真是香
kylinpoet kylinpoet 2020-06-23 10:32:50
3
1
简单

【项目介绍】

夏天既然不能到平均温度40℃的室外蹦跶,那当然要造作一夏了!待在家里闲着也是闲着,就开开心心地吹吹电风扇吧。

可是,伸手按开关也要做工产生热量。因此,本项目准备只动口不动手,用语音控制开关电风扇。 

【解决方案】

要使用语音控制,必须要有个好的语音接收设备,家里正好有个百度音箱就准备用它了。

因为百度音箱有个开发者技能的功能,所以本项目可以借助这个功能,打通网络。通过mqtt协议,控制物联网的风扇

【作品演示】


【制作过程】

1.使用百度音箱技能

发现在DuerOS 技能开放平台,选择一个好的技能名称太重要了。“造作一夏”不能识别,“清凉模式”不能识别,“论坛清凉一下”不能识别,

最终选用了“造物记清凉”作为技能名。。。好尴尬的名字

2.在调试的时候发现:什么意图中文名、意图标识名、常用表达、槽位标识、词典。。。这些专用名词太复杂,险些被绕晕

3.因为使用了别人开源的百度技能SDK,读懂代码花了很久。。。

4.本项目使用wifiduino作为主板,因为它用的是esp8266的芯片,引脚和主板接口刚开始没有仔细看对应,花了些时间填了个坑

。。。。。。

真是“纸上得来终觉浅,绝知此事要躬行”,真正操作的过程真是一把辛酸一把泪,不知道其他人是不是也和我有同样的感受


projectImage
projectImage

【总结】

因为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();
}
	                    				
附件 附件
Makelog作者原创文章,未经授权禁止转载。
3
1
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
[[c.comment_content]]