電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>Alexa控制的門牌演示

Alexa控制的門牌演示

2023-01-31 | zip | 0.33 MB | 次下載 | 免費

資料介紹

描述

為什么?

您正在經(jīng)營一家小型“極客商店”,想給當(dāng)天的第一位/最后一位顧客留下深刻印象?您想離開辦公桌休息片刻,并認(rèn)為告訴您的同事 - 和 Alexa - 應(yīng)該足夠努力(你為什么要留下一張紙條)?或者只是為了世界展示有多?還是只是為了好玩?;)

簡介及免責(zé)聲明

這只是一個演示、一個原型、一個簡短的草圖或快速食譜,介紹如何使用亞馬遜的 Alexa 技能套件控制連接到 Arduino MKR1000 的電子紙顯示器。

如果您需要更全面的信息

我們鼓勵您閱讀此平臺/產(chǎn)品的相關(guān)文檔。

先決條件

  • Arduino MKR1000 的 Arduino 桌面 IDE 設(shè)置(參見此處
  • 可選:Amazon Echo 設(shè)備

關(guān)于費用:

對于硬件(MKR1000 和電子紙模塊),您可能需要花費大約 50 美元。

要開發(fā) Alexa 技能,您需要一個 Amazon Developer 帳戶,該帳戶可以免費注冊。您還需要創(chuàng)建一個 AWS Lambda 函數(shù)。計算服務(wù) AWS Lambda 包含在 AWS 免費套餐中,每月有 1.000.000 個請求,期限不受限制。要創(chuàng)建和使用 AWS 免費套餐資源,您必須注冊到 AWS 并提供有效的信用卡,如果您在免費套餐計劃的限制范圍內(nèi),則不會被收取費用。

Thinger.io提供免費的評估、學(xué)習(xí)和測試計劃。對于此項目,您需要配置此計劃中包含的 2 個免費設(shè)備之一,并且您可能不會超過免費計劃中的呼叫速率限制。

物聯(lián)網(wǎng)

Thinger.io提供“一個隨時可用的可擴(kuò)展云基礎(chǔ)設(shè)施,用于連接數(shù)百萬臺設(shè)備。您可以使用我們易于使用的管理控制臺來控制它們,或者使用我們的 REST API 將它們集成到您的業(yè)務(wù)邏輯中。開源?!?/font>

平臺提供的設(shè)備端點的 REST API 使將設(shè)備集成到其他平臺(此處為 AWS 平臺)上的應(yīng)用程序變得容易。

首先按照如下文檔從云控制臺創(chuàng)建一個設(shè)備

?
?
?
?
poYBAGPXLmiAVM1hAACVo6TAW_g556.jpg
?
1 / 8 ?在“設(shè)備”部分下單擊“添加設(shè)備”
?

按照這些說明設(shè)置您的 Arduino IDE 和Arduino MKR1000 的本部分。上傳自定義示例草圖后...

#define _DEBUG_
#define _DISABLE_TLS_
#include 
#include 
#define USERNAME "3magku"
#define DEVICE_ID "DoorSign"
#define DEVICE_CREDENTIAL "Iq7OxG4htORD"
#define SSID "yourWifiSsid"
#define SSID_PASSWORD "yourWifiPassword"
#define LED_PIN 6
ThingerWifi101 thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);
void setup() {
 Serial.begin(115200);
 // configure wifi network
 thing.add_wifi(SSID, SSID_PASSWORD);
 pinMode(LED_PIN, OUTPUT);
 // pin control example (i.e. turning on/off a light, a relay, etc)
 thing["led"] << digitalPin(LED_PIN);
 // resource output example (i.e. reading a sensor value, a variable, etc)
 thing["millis"] >> outputValue(millis());
 // more details at http://docs.thinger.io/arduino/
}
void loop() {
 thing.handle();
}

...您的設(shè)備狀態(tài)在云控制臺中應(yīng)如下所示:

?
poYBAGPXLm6AarxBAAD0hYPgLBo842.jpg
設(shè)備在線
?

微雪1.54寸電子紙模組

雪1.54英寸電子紙模組一款采用微封裝電泳顯示技術(shù)MED圖像顯示技術(shù)的電子紙設(shè)備

電子紙屏幕通過反射環(huán)境光來顯示圖案,不需要背景光。一旦設(shè)置/更新顯示模式,模塊在待機(jī)模式下的功耗極低(5 uA = 0.000005 A)

由于 Arduino MKR1000 提供比 Arduino UNO/Mega 多得多的 SRAM,并且基于 3.3 V 電壓,因此它是與 Waveshare 1.54 英寸電子紙模塊一起使用的相當(dāng)大的平臺。電子紙顯示器的極低功耗使得在電池供電時嘗試將其連接到像 MKR1000 這樣的電路板更加有趣。

要將顯示模塊連接到 MKR1000 并在其上運行供應(yīng)商的示例程序,您基本上可以按照供應(yīng)商文檔中“使用 Arduino”的說明進(jìn)行操作,并考慮 MKR1000 和 UNO 之間引腳布局的一些差異:

MKR1000 上SPI引腳是D8 (MOSI) 、D9 (SCK)和 D10 (MISO) - UNO 上的 SPI 引腳是 D11 (MOSI)、D12 (MISO) 和 D13 (SCK)。

按照Waveshare Wiki 頁面的說明,必須將兩個 SPI 信號 SCK 和 MOSI 重新映射到 MKR1000 的 D9 和 D8。其余信號如 CS、DC、RST 和 BUSY 可以自由映射到 MKR1000 的其他數(shù)字信號。

這是將模塊與 MKR1000 接線的擴(kuò)展映射表:

?
pYYBAGPXLnGACfshAACU_Aj4EUo299.png
引腳和電線;將電子紙模塊連接到 MKR1000
?

生成的接線如下所示:

?
pYYBAGPXLnOAdnp5AAE1iUbHerI044.png
接線(架構(gòu))
?

真正的原型設(shè)置如下所示:

?
poYBAGPXLqGAQQ26ABFQ189cFZ4047.jpg
測試電子紙模塊設(shè)置
?

要運行供應(yīng)商提供的示例和您自己的草圖,需要對提供的庫代碼進(jìn)行一些小的更改:

  • 將demo包的arduino/libraries目錄下的文件復(fù)制到documents/arduino/libraries,實際路徑由Arduino IDE --> File --> Preferences -->Sketchbook location決定。
  • 在文件libraries/ep1in54/epdif.h中進(jìn)行以下更改以反映 MKR1000 修改后的引腳映射:
#ifndef EPDIF_H
#define EPDIF_H
#include 
/* COMMENT OR REMOVE THIS SECTION: 
// Pin definition
#define RST_PIN 8
#define DC_PIN 9
#define CS_PIN 10
#define BUSY_PIN 7
*/
/* ADD THE FOLLOWING SECTION: */
// Custom pin definition (MKR1000)
#define RST_PIN 4
#define DC_PIN 5
#define CS_PIN 7
#define BUSY_PIN 3
class EpdIf {
  • 編譯并上傳演示草圖 epd1in54-demo 以測試模塊和您的設(shè)置。

門牌 - 應(yīng)用

門牌應(yīng)用程序是前面部分中兩個示例草圖的簡單組合:用??于測試Thinger.io連接性的草圖和 Waveshare 提供的 ep1in54-demo 草圖。

對于這個演示,我們基本上:

  • 創(chuàng)建三個小的 (200 x 200 px) 單色位圖并將這些圖像轉(zhuǎn)換為 C 字節(jié)數(shù)組 - 請參閱 Waveshare wiki 中的“如何顯示圖像”部分
?
?
?
?
pYYBAGPXLqSAS27WAAAbpasacXQ591.png
?
1 / 3 ?打開
?
  • 在草圖中包含這些位圖數(shù)組:
/* "imagedata_open.h" */
extern const unsigned char IMAGE_DATA_OPEN[];
/* "imagedata_open.coo" */
#include "imagedata_open.h"
#include 
const unsigned char IMAGE_DATA_OPEN[] PROGMEM = {
/* 0X00,0X01,0XC8,0X00,0XC8,0X00, */
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ...
// Image data for "We are open", "Sorry, we are closed" and "Be right back" ...
#include "imagedata_open.h"
#include "imagedata_closed.h"
#include "imagedata_brb.h"
  • 為thinger.io定義輸入資源和處理程序以接收參數(shù)以選擇要顯示的圖像:
// Handle for "image" resource:
 thing["image"] << [](pson &in) {
   boolean clean = in["clean"];
   int number = in["number"];
   displayImage(clean, number);
 };
// Handler called function for displaying images:
void displayImage(boolean clean, int number)
{
 if (clean) { ePaperClear(); }
 const unsigned char *image_data;
 switch (number)
 {
   case 0:
     image_data = IMAGE_DATA_OPEN;
     break;
   case 1:
     image_data = IMAGE_DATA_AWAY;
     break;
   case 2:
     image_data = IMAGE_DATA_CLOSED;
     break;
 }
 ePaperShowImage(image_data);
}
// Clear e-ink display:
void ePaperClear()
{
 epd.ClearFrameMemory(0xFF);   // bit set = white, bit reset = black
 epd.DisplayFrame();
 epd.ClearFrameMemory(0xFF);   // bit set = white, bit reset = black
 epd.DisplayFrame();
 epd.Init(lut_partial_update);
}
// Display image on e-ink display:
void ePaperShowImage(const unsigned char image_data[])
{
 epd.SetFrameMemory(image_data);
 epd.DisplayFrame();
 epd.SetFrameMemory(image_data);
 epd.DisplayFrame();
 epd.Init(lut_partial_update);
}

完整的代碼可以在這里找到

編譯、上傳和運行代碼后,設(shè)備應(yīng)thinger.io設(shè)備狀態(tài)板上顯示為在線,單擊查看 API按鈕后,您應(yīng)該會DOORSIGN API中看到先前定義的輸入資源為圖像 - 私有。當(dāng)您展開此項時,您將看到輸入參數(shù),并且您將能夠向您的設(shè)備發(fā)送請求:

?
?
?
?
poYBAGPXLqeAcCcoAADQNE3w714690.png
?
1 / 6 ? DOORSIGN 儀表板
?

如果您選擇顯示查詢,則顯示的 REST 調(diào)用稍后將在 AWS Lambda 函數(shù)中使用。

可以在此處找到有關(guān)thinger.io服務(wù)器 API的更多信息。

Alexa 技能

從Amazon Developer Console開始創(chuàng)建 Alexa Skill

  • 將技能類型保留為自定義交互模型。
  • 如果您的設(shè)備使用英語(英國),請將語言更改為英語(英國)。
  • 選擇一個名稱,例如“門牌”。
  • 將所有其他全局字段保留否。
  • 保存
  • 請注意下一個屏幕上新創(chuàng)建的應(yīng)用程序 ID 。
  • 單擊下一步。
?
?
?
?
pYYBAGPXLqmAZoCDAADqu5_kme4516.jpg
?
1 / 5 ?開發(fā)者控制臺
?

接下來定義

  • Intent Schema (見下文)
{
 "intents": [
    {
 "slots": [
        {
 "name": "Status",
 "type": "STATUS_TYPE"
        }
      ],
 "intent": "ShowStatus"
    },
    {
 "intent": "AMAZON.HelpIntent"
    },
    {
 "intent": "AMAZON.StopIntent"
    }
  ]
}
  • 自定義插槽類型“STATUS_TYPE” ,值為“ open ”、“ away ”和“ closed
  • 示例話語(見下文)
ShowStatus display that we are {Status}
ShowStatus show that i am {Status}
ShowStatus we are {Status}
ShowStatus i am {Status}
?
?
?
?
pYYBAGPXLqyATUlMAAD4METnQak429.jpg
?
1 / 5 ?交互模型:意圖模式
?

AWS 拉姆達(dá)

作為技能的端點,我們創(chuàng)建了一個 AWS Lambda 函數(shù)。

  • 選擇所有服務(wù) > 計算 > Lambda
  • 選擇創(chuàng)建函數(shù)
  • 通過輸入“alexa”選擇藍(lán)圖和過濾器
  • 選擇任何藍(lán)圖,例如alexa-skill-kit-sdk-factskill (Node.js),然后單擊配置
  • 為您的功能選擇一個名稱,例如myDoorSign
  • 選擇現(xiàn)有角色或定義新角色(參見此處
  • 函數(shù)創(chuàng)建成功后:
  • 添加類型為Alexa Skills Kit的觸發(fā)器,并通過輸入先前創(chuàng)建的 Alexa Skill的應(yīng)用程序 ID對其進(jìn)行配置。
  • 函數(shù)代碼部分,選擇文件 index.js 的內(nèi)聯(lián)編輯器中的所有代碼,并通過粘貼以下代碼替換它:
'use strict';
/*
 * App ID for the skill
 */
var APP_ID = "REPLACE_ME__ALEXA_APP_ID";
var SKILL_NAME = "REPLACE_ME__ALEXA_SKILL_NAME";
/*
 * Alexa SDK
 */
var Alexa = require('alexa-sdk');
/*
* HTTP/HTTPS
*/
var https = require('https');
/*
 * Thinger.io device
 */
const ti_user = "REPLACE_ME__THINGER_IO_USER";
const ti_device = "REPLACE_ME__THINGER_IO_DEVICE_ID";
const ti_token = "REPLACE_ME__THINGER_IO_ACCESS_TOKEN";
const ti_api_host = "api.thinger.io"
const ti_api_port = 443;
const ti_api_base_path = "/v2/users/" + ti_user + "/devices/" + ti_device + "/";
/*
 * Register handlers
 */
exports.handler = function (event, context, callback) {
 var alexa = Alexa.handler(event, context);
 alexa.appId = APP_ID;
 alexa.registerHandlers(handlers);
 alexa.execute();
};
var handlers = {
 /*
     * The "ShowStatus" intent:
     */
 "ShowStatus": function () {
 var myHandler = this;
 var speechOutput;
 var cardTitle;
 var statusSlot = this.event.request.intent.slots.Status;
 var status = "open";
 var imageNumber = 0;
 // Get slot(s):
 if (statusSlot && statusSlot.value) {
 status = statusSlot.value.toLowerCase();
        }
 // Determine image number from status:
 switch (status) {
 case "open":
 imageNumber = 0;
 break;
 case "closed":
 imageNumber = 2;
 break;
 case "away":
 imageNumber = 1;
 break;
 default:
 imageNumber = 0;
 break;
        }
 // Build path:
 var ti_api_path = ti_api_base_path + "image";
 // Build request body:
 var ti_input = { in: {
 clean: true,
 number: imageNumber
            }
        };
 // Build POST request:
 var request_body = JSON.stringify(ti_input);
 var request_headers = {
 "Authorization": "Bearer " + ti_token,
 "Content-Type": "application/json",
 "Content-Length": Buffer.byteLength(request_body)
        }
 var request_options = {
 host: ti_api_host,
 port: ti_api_port,
 path: ti_api_path,
 method: "POST",
 headers: request_headers
        }
 console.log("REQUEST - HEAD:" + JSON.stringify(request_options));
 console.log("REQUEST - BODY:" + JSON.stringify(request_body));
 // Handle POST request:
 var request = https.request(request_options, function (r) {
 console.log("RESPONSE - STATUS:" + r.statusCode);
 r.on('data', function (d) {
 console.log("RESPONSE:" + d);
 var d_json = JSON.parse(d);
            });
 r.on('end', function () {
 console.log("END: returning speech output ...");
 speechOutput = "The door sign has been updated successfully! The new status shown is '"+ status+"'.";
 cardTitle = "Success";
 myHandler.emit(':tellWithCard', speechOutput, cardTitle, speechOutput);
            });
 r.on('error', function (e) {
 console.log("ERROR:");
 console.error(e);
 speechOutput = "Sorry, there was problem - I could not update the door sign!";
 cardTitle = "Error";
 myHandler.emit(':tellWithCard', speechOutput, cardTitle, speechOutput);
            });
        });
 // Send POST request:
 request.write(request_body);
 request.end();
    },
 /*
     * Built-in intents:
     */
 "AMAZON.HelpIntent": function () {
 this.emit(':ask', "You can say tell door sign 'we are open', or, you can say exit... What can I help you with?", "What can I help you with?");
    },
 "AMAZON.StopIntent": function () {
 var speechOutput = "OK";
 this.emit(':tell', speechOutput);
    },
 'Unhandled': function () {
 this.emit(':ask', "What can I do for you?", "What can I do for you?");
    }
};

并替換字符串:

  • 將_ME__THINGER_IO_USER 替換為您的thinger.io用戶名
  • REPLACE_ME__ALEXA_APP_ID 為之前創(chuàng)建的 Alexa Skill 的 Application Id
  • REPLACE_ME__ALEXA_SKILL_NAME 為之前創(chuàng)建的 Alexa Skill 的名稱

在您的 Alex Skill 的配置部分:

  • 選擇AWS Lambda ARN (Amazon 資源名稱)作為服務(wù)端點類型
  • 并在Default字段中輸入此 Lambda 函數(shù)的 ARN 。
?
?
?
?
poYBAGPXLq6Ad8hxAAFbswbu2zk363.jpg
?
1 / 15 ? AWS 管理控制臺
?

把它們縫在一起

現(xiàn)在您應(yīng)該已經(jīng)將您的設(shè)備連接到thinger.io平臺(通過用戶名、設(shè)備 ID 和設(shè)備令牌),將您的設(shè)備鏈接到 AWS Lambda 函數(shù)(通過用戶名、設(shè)備 ID 和訪問令牌)并將 AWS Lambda 函數(shù)鏈接到一個Alexa 技能(通過技能應(yīng)用程序 ID 和 Lambda 函數(shù)的 ARN)。

如果所有步驟都已正確執(zhí)行,您可以測試您的設(shè)置。

?
?
?
?
pYYBAGPXLrKAEJPxAAE6K74ctWY560.jpg
?
1 / 4 ?測試
?

?

?

改進(jìn)、更改和待辦事項

  • 一個很好的包裝
  • 更復(fù)雜、功耗更低的通信設(shè)置(例如,具有重新連接算法的 MQTT 有助于延長睡眠時間)
  • 更大的顯示器
  • 如果您不能(或不想)獲得 Arduino MKR1000,任何具有 SPI 硬件支持的 Arduino 代碼兼容設(shè)備(例如 ESP8266 型板)也應(yīng)該這樣做,如果您稍微調(diào)整一下引腳映射.

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應(yīng)用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關(guān)電源設(shè)計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設(shè)計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費