社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 1095|回复: 4

[原创] 【任性DIY】云控制的LED灯

[复制链接]

453

TA的帖子

9

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2016-7-29 10:29:56 | 显示全部楼层 |阅读模式
本帖最后由 fyaocn 于 2016-7-29 13:27 编辑

1. 概述
基于物联网的智能控制技术,配套出现了很多产品。如 无线控制的LED灯等等等,在此设计一款云控制的LED灯。
云控制采用2种方案,搭建一个服务器方案和采用Amazon的语音控制服务。分别描述。
2. 软件和硬件资源
2.1 硬件
基于Chipkit WF32物联网开发板——1个
L298驱动模块——1个
12V,1.5W的LED灯珠 ——1只(可以并联扩展)
12V电源(电池或直流电源)
杜邦线若干
2.2 软件
Arduino扩展MPIDE及专用的wifi模块驱动库
Amazon AWS SDK
3. 硬件构成
3.1 给一张全家福
787903262.jpg

3.2 把L298的输入IO连接Chipkit WF32的第13引脚接入,输出接口接LED灯珠。然后给开发板5V供电,给L298供电12V,并启用板载供电跳线就可以了。


回复

使用道具 举报

453

TA的帖子

9

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

 楼主| 发表于 2016-7-29 10:30:27 | 显示全部楼层
本帖最后由 fyaocn 于 2016-7-29 12:50 编辑

4. 服务器方案
4.1 在MPIDE的范例中,有deWebServer项。这个是基于无线驱动库生成的arduino兼容程序,很容易理解。其中,wifi的管理和设置都由库完成,实现非常简单。
程序如下:
其中对于web的访问通过addhtml函数实现,主页的页面设置,有专门的html页面,要复制到开发板的SD卡上,这个卡专门放有关html页面的文件。而程序还是要下载到MCU的内存中。
对config.h的配置,包括server的配置,如端口,SSID,密码等。

#include <MRF24G.h>                         // This is for the MRF24WGxx on a pmodWiFi or WiFiShield

/************************************************************************/
/*    Network libraries                                                 */
/************************************************************************/
// The base network library
// this is a required library
// Do not comment out this library
#include <DEIPcK.h>

//  -----  COMMENT THIS OUT IF YOU ARE NOT USING WIFI  -----
#include <DEWFcK.h>

//************************************************************************
//************************************************************************
//**************** END OF LIBRARY CONFIGURATION **************************
//************************************************************************
//************************************************************************


/************************************************************************/
/*    Other libraries; Required libraries                               */
/************************************************************************/
// You must have an SD card reader somewhere
// as the HTTP server uses the SD card to hold the HTML pages.
// this is a required library; we must specify this in the .pde for
// MPIDE to include it.
#include    <SD.h>

// and this is the HTTPServer library code.
// this is a required library
#include    <HTTPServer.h>

/************************************************************************/
/*    HTTP URL Matching Strings                                         */
/************************************************************************/
// These are the HTTP URL match strings for the dynamically created
// HTML rendering functions.
// Make these static const so they get put in flash
static const char szHTMLRestart[]       = "GET /Restart ";
static const char szHTMLTerminate[]     = "GET /Terminate ";
static const char szHTMLReboot[]        = "GET /Reboot ";
static const char szHTMLFavicon[]       = "GET /favicon.ico ";
static const char szHTMLGetIO[]         = "GET /IOPage.htm ";
static const char szHTMLPostLED[]       = "POST /IOPage.htm ";

// here is our sample/example dynamically created HTML page
GCMD::ACTION ComposeHTMLGetIO(CLIENTINFO * pClientInfo);
GCMD::ACTION ComposeHTMLPostLED(CLIENTINFO * pClientInfo);

#define CHANGE_HEAP_SIZE(size) __asm__ volatile ("\t.globl _min_heap_size\n\t.equ _min_heap_size, " #size "\n")
CHANGE_HEAP_SIZE(0x200);

/***    void setup(void)
*
*    Parameters:
*          None
*              
*    Return Values:
*          None
*
*    Description:
*   
*      Arduino Master Initialization routine
*      
*      
* ------------------------------------------------------------ */
void setup(void)
{   
    // Must do a Serial.begin because the HTTP Server
    // has diagnostic prints in it.
    Serial.begin(9600);
    Serial.println("WebServer v4.0");
    Serial.println("Copyright 2014, Digilent Inc.");
    Serial.println("Written by Keith Vogel");
    Serial.println();

    // set up the IO pins
    for(int i=0; i < HTTPCIO; i++)
    {
        pinMode(rgReplacePins, INPUT);
    }

    // set up the LED pins
    for(int i=0; i < HTTPCLED; i++)
    {
        pinMode(rgReplacePins[HTTPCIO + i], OUTPUT);
    }

    // add rendering functions for dynamically created web pages
    // max of 10 AddHTMLPage() allowed

    // these are the Select picture pages in Post.htm
    AddHTMLPage(szHTMLGetIO,        ComposeHTMLGetIO);
    AddHTMLPage(szHTMLPostLED,      ComposeHTMLPostLED);

    // comment this out if you do not want to support
    // restarting the network stack from a browser
    AddHTMLPage(szHTMLRestart,      ComposeHTMLRestartPage);

    // comment this out if you do not want to support
    // terminating the server from a browser
    AddHTMLPage(szHTMLTerminate,    ComposeHTMLTerminatePage);

    // comment this out if you do not want to support
    // rebooting (effectively hitting MCLR) the server from a browser
    AddHTMLPage(szHTMLReboot,       ComposeHTMLRebootPage);

    // Make reading files from the SD card the default compose function
    SetDefaultHTMLPage(ComposeHTMLSDPage);

    // Initialize the SD card
    SDSetup();

    // Initialize the HTTP server
    ServerSetup();
}


* ------------------------------------------------------------ */
void loop(void)
{
    // process the HTTP Server
    ProcessServer();
}

4.2 具体实现对LED的控制是用web编程实现的,可以用javascript。还是比较容易的。



回复

使用道具 举报

453

TA的帖子

9

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

 楼主| 发表于 2016-7-29 10:30:49 | 显示全部楼层
本帖最后由 fyaocn 于 2016-7-29 10:51 编辑

5. Amazon的语音控制服务
基于Amazon云服务的Chipkit WF32是一款优秀的物联网开发板,通过MRF24GWiFi模块可以使得其连接互联网,基于Digilence的专有DEIPcKDEWFcK库实现对WiF的连接和控制。基于云服务的物联网技术有多种控制方式,而Amazon提供的语音识别技术,使得控制和交互更方便和有效。Amazon语音服务是需要AmazonEcho音响来提供服务的。不过,最近提供了一个可以模拟的网站接口使得没有这个设备可以测试和使用Amazon的语音服务。
5.1 首先需要创建一个Amazon账号,然后进入开发者页面,就可以开始开发之路了。
5.2 设置AWS IoT服务
AWS IoT服务是把硬件设备虚拟成一个设备Device,提供MQTT或者HTTP服务连接这个设备。在本项目中Chipkit WF32+LED灯就是这个连接的智能硬件设备。
5.2.1 创建一个设备Create athing
AWS-iot-01.PNG
创建后生成一个endpoint,这个是把本设备和其他设备区分的唯一标记,需要在后面用到的。
Thing Name: WF32LED
REST API endpoint:
MQTT topic:
$aws/things/WF32LED/shadow/update
AWS-iot-02.PNG
5.2.2 创建certificate
AWS-iot-03.PNG
AWS-iot-04.PNG
这个是保密和认证的重要机制。创建了3个文件,都需要在程序中用到。
Certificate ARN
arn:aws:iot:us-east-1:571618967604:cert/05321abe48a0468b82736de4dc62571f32d014e910b4637cd8b18818aaafe9a4
5.2.3 关联设备thing和证书certificate。并创建一个策略policy
AWS-iot-05.PNG
关联设备和证书,并生成一个对应于服务的允许和策略过滤器,是Amazon安全层层设防的措施,对应于前一阵一个wifi控制开关要求删差评的事件,表现出Amazon对于安全和易用性之间的一种平衡方法。理解和使用起来确实比较麻烦。
5.3 设置Lambda function
AWS Lambda是可以理解为一个具有一定云端计算能力的处理引擎,可以自定义对于事件进行处理。基于Amazon后台有实时数据处理,数据分析,机器学习等服务,这样的功能可以把数据进行初始分析并调用对应的AWS云服务,是一个可以自定义功能的部分。采用的比较容易使用的javascriptpythonnode.js等语言进行功能设置。
5.3.1 创建lambdafunction
在控制台里选择lambda,进入创建选项,可以选择一个blueprint作为范例修改,以减少配置的选择。
AWS-lambda-01.PNG
5.3.2 配置起动triggers
起动这个lambda功能的可以是AWS的其他服务,这里选择了ASK,通过ASK来启动lambda的服务
AWS-lambda-02.PNG
5.3.3 配置程序
AWS-lambda-03.PNG
这里显示的是基于范例的配置程序,其中起到主要功能的就是
def lambda_handler(event, context)
这个函数,处理lambda的事件。在这个阶段可以进行修改和配置。
5.3.4 完成配置
AWS-lambda-04.PNG
和前面一样,同样有一个唯一编码:
ARN –
arn:aws:lambda:us-east-1:571618967604:function:WF32LED
5.3.5 Setting up Alexa Voice Skill
5.3.5.1 进入https://developer.amazon.com/edw/home.html#/ ,点击“Apps & Services.并选择“Alexa”.
AWS-ASK-01.PNG
5.3.5.2 使用定制ASK,并选择起动的语句,需要注意避免和其他已经有的话语重复,所以可以取一下比较小众的词句。
AWS-ASK-02.PNG
5.3.5.3 接着进入语音界面UI的设置。和我们通常的图形UI不同,语音UI需要确定的是说那些词语,如何反馈和互动。在ASK中是用Intent和utterance的组合来实现的。
这里使用的是smart home API的定制UI
2.3.6 测试lambdafunction
返回到 Alexa Skill,然后点击 “Test”  ,就可以测试lambda function



AWS-ASK-03.PNG
AWS-ASK-04.PNG


回复

使用道具 举报

453

TA的帖子

9

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

 楼主| 发表于 2016-7-29 10:31:03 | 显示全部楼层
本帖最后由 fyaocn 于 2016-7-29 10:57 编辑

6. 总结
使用服务器的开发项目基本可以完成预定的计划,但是AWS的语音配置还没有通过lambda测试。主要就是在无线身份认证失败。具体还需要调试。
这样,我们通过网页或者对着网页的端口说话,就可以控制LED灯的亮灭,应该是很吸引人的事情。下一次用CC3200来继续尝试实现这个声控UI的LED灯。
下面是Echo的模拟页面
echo.PNG


回复

使用道具 举报

454

TA的帖子

21

TA的资源

版主

Rank: 6Rank: 6

发表于 2016-7-30 14:15:04 | 显示全部楼层
不错,有演示效果图吗?
QQ:252669569


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-1-20 09:19 , Processed in 0.152548 second(s), 16 queries , Redis On.

快速回复 返回顶部 返回列表