電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>家庭自動(dòng)化開(kāi)源案例

家庭自動(dòng)化開(kāi)源案例

2022-12-14 | zip | 0.27 MB | 次下載 | 免費(fèi)

資料介紹

描述

介紹和動(dòng)機(jī)

語(yǔ)音和家庭自動(dòng)化自然結(jié)合。昨天回家告訴家里該做什么的夢(mèng)想是今天的現(xiàn)實(shí)。

為了嘗試家庭自動(dòng)化,我決定修改我的一個(gè)舊項(xiàng)目BLElectric Light 101 ,并使其成為帶有Mycroft/Picroft的語(yǔ)音控制物聯(lián)網(wǎng)設(shè)備。

整體設(shè)計(jì)

我已經(jīng)從Chuck Hellyebuck 的 Filament Friday中“回收”了 3D 打印的 Edison 風(fēng)格的電燈泡燈泡中的新像素環(huán)提供光和顏色效果。在最初的項(xiàng)目中,我使用 Arduino 101 使用其板載 BLE 功能來(lái)控制環(huán)。

在這個(gè)項(xiàng)目中,我用基于 ESP8266 的開(kāi)發(fā)板SparkFun ESP8266 Thing - Dev Board 替換了 Arduino 101 和 BLE,并將其變成了燈泡的 Web 服務(wù)器。這允許將燈泡或東西放置在我的家庭 Wifi 網(wǎng)絡(luò)上。

在我的 MyCroft 技能中使用 python HTTP請(qǐng)求庫(kù)給了我們:語(yǔ)音物聯(lián)網(wǎng)

我還決定將步進(jìn)電機(jī)連接到電路板上。為什么?好吧,因?yàn)槲铱梢裕?/font>但說(shuō)真的,從我用來(lái)啟動(dòng)它的語(yǔ)音命令中,你可能會(huì)猜到我將來(lái)會(huì)在這個(gè)項(xiàng)目中走向何方。. .

請(qǐng)注意,這個(gè)項(xiàng)目也可以使用帶有 ESP8266 WiFi 的 Adafruit Feather HUZZAH來(lái)完成。

開(kāi)始使用基于 8266 的板

ESP8266 是一款支持 WiFi 的微控制器,可以通過(guò) Arduino IDE 進(jìn)行編程。adafruit 和 Sparkfun 基于這種芯片的開(kāi)發(fā)板價(jià)格低廉,并且有大量的庫(kù)、教程和代碼示例可供學(xué)習(xí)。它們的主要優(yōu)勢(shì)是能夠使用 Arduino IDE 和 WiFi 功能輕松對(duì)其進(jìn)行編程。這些板的小尺寸使其非常容易嵌入到物體中并通過(guò) WiFi 輕松連接。該板的一個(gè)相對(duì)缺點(diǎn)是 GPIO 和 ADC 引腳數(shù)量較少,但正如您從我的項(xiàng)目中看到的那樣,Huzzah!用 PubNub 給我上色!,有辦法克服這個(gè)問(wèn)題。

總體而言,易用性、大量社區(qū)支持和共享以及 WiFi 使其成為 Makers 幾乎理想的物聯(lián)網(wǎng)微控制器。即將推出的ESP32 開(kāi)發(fā)板希望讓任何對(duì)引腳編號(hào)的擔(dān)憂(yōu)成為過(guò)去!

為了開(kāi)始使用 Arduino 上的電路板,我將您指向 Sparkfun 和 adafruit 網(wǎng)站。兩個(gè)指南都很有用,推薦的設(shè)置似乎適用于任一板:

兩個(gè)教程都涵蓋了使用開(kāi)發(fā)板和 Arduino IDE 所需的驅(qū)動(dòng)程序和庫(kù)的安裝。

安裝 ESP8266 庫(kù)后,您應(yīng)該查看 WiFi 示例草圖。我使用這些示例提出了我自己的 Web 服務(wù)器代碼,如下所述。

網(wǎng)絡(luò)服務(wù)器

Web 服務(wù)器是一個(gè)程序,它在端口上偵聽(tīng)http命令并通過(guò)沿指定路由執(zhí)行代碼來(lái)響應(yīng)它們(路由是處理特定http命令的代碼 - 這將在稍后顯而易見(jiàn))。ESP8266 提供了多個(gè)庫(kù)和大量代碼示例,使您可以非常輕松地設(shè)計(jì)自己的 Web 服務(wù)器。不要害怕,您的 Web 服務(wù)器草圖將遵循與 Arduino IDE 程序相同的結(jié)構(gòu)。它將具有 setup() 和 loop() 函數(shù),以及一些函數(shù)等。

我們的網(wǎng)絡(luò)服務(wù)器將有 4 條路線。一個(gè)用于處理根部,一個(gè)用于打開(kāi)和關(guān)閉燈泡,一個(gè)用于處理燈光顏色,最后一個(gè)用于控制我們的步進(jìn)電機(jī)。您可以將這些路由中的每一個(gè)視為按需執(zhí)行的函數(shù)或代碼塊。在未來(lái)的重構(gòu)中,燈泡相關(guān)的路由將更改為一個(gè)路由,有 2 個(gè)參數(shù),但稍后會(huì)更多。現(xiàn)在,我將逐行介紹如何在 ESP8266 板上設(shè)置 Web 服務(wù)器的代碼。

就像在 Arduino IDE 中編寫(xiě)的任何程序一樣,我們將編寫(xiě)我們的 Web 服務(wù)器作為草圖上傳到我們的板上。為了設(shè)置我們的服務(wù)器,我們需要導(dǎo)入一些標(biāo)準(zhǔn)庫(kù):

#include  
#include  
#include  
#include  

為了將我們的 Web 服務(wù)器連接到我們的 WiFi 網(wǎng)絡(luò),我們必須提供我們的網(wǎng)絡(luò) ID 和密碼,并創(chuàng)建一個(gè) Web 服務(wù)器對(duì)象來(lái)監(jiān)聽(tīng)端口 80:

const char* ssid = "********"; 
const char* password = "**********"; 
ESP8266WebServer server(80); 

如果您遵循代碼,您將看到處理我上面提到的路由的函數(shù)列表。但是,我們將首先進(jìn)入草圖的setup()函數(shù)。當(dāng)我們正在編寫(xiě)我們的第一個(gè) Web 服務(wù)器時(shí),我們需要將消息寫(xiě)入串行端口。這將使我們能夠看到我們正在使用的開(kāi)發(fā)板的IP 地址,這對(duì)于我們向開(kāi)發(fā)板發(fā)送命令至關(guān)重要!

Serial.begin(115200); 
 WiFi.begin(ssid, password); 
 Serial.println(""); 
 // Wait for connection 
 while (WiFi.status() != WL_CONNECTED) { 
   delay(500); 
   Serial.print("."); 
 } 
 Serial.println(""); 
 Serial.print("Connected to "); 
 Serial.println(ssid); 
 Serial.print("IP address: "); 
 Serial.println(WiFi.localIP()); 
 if (MDNS.begin("esp8266")) { 
   Serial.println("MDNS responder started"); 
 } 

在串行輸出中看到 IP 地址后,請(qǐng)記下它。它將用于在我們的 MyCroft 技能中與董事會(huì)溝通。它將類(lèi)似于172.16.254.1 ,為了連接到板,您將發(fā)出一個(gè) http 命令,例如:

http://172.16.254.1/stepper 

IP 是服務(wù)器的主機(jī)地址,“/stepper”是我們?cè)诖a中指定的資源路徑或路由。事實(shí)上,以下幾行指定了我們的每個(gè)路徑和每個(gè)服務(wù)器應(yīng)該執(zhí)行的響應(yīng)。要理解這一點(diǎn),請(qǐng)像 Web 服務(wù)器一樣閱讀它:

從 http 請(qǐng)求 http://172.16.254.1/stepper 接收到路徑“/stepper”后,我將執(zhí)行名為 handleStepper 的函數(shù)中的代碼
server.on("/", handleRoot); 
server.on("/lamp", handleCommand); 
server.on("/color", handleColor); 
server.on("/stepper",handleStepper); 

步進(jìn)器處理代碼很容易理解(我為使用延遲功能道歉),因此不是很有趣。

因此,我將介紹handleCommand()代碼,它不僅可以幫助您學(xué)習(xí)如何創(chuàng)建和處理資源路徑,而且還必須將參數(shù)和值發(fā)送到您的函數(shù)!handleCommand的代碼在函數(shù)void handleCommand()中定義,它必須具有參數(shù)中指定的確切名稱(chēng)才能傳遞給server.on()函數(shù)。

void handleCommand() 
{ 
 String message = "done"; 
 int commandValue; 
 ...

我們創(chuàng)建一個(gè)名為message的 String 變量,以傳回發(fā)出請(qǐng)求的客戶(hù)端。您可以在此過(guò)程中修改此字符串以將您希望返回的任何消息傳遞給您的客戶(hù)。客戶(hù)端可以是您的網(wǎng)絡(luò)瀏覽器、您編寫(xiě)的程序,或者在我們的例子中是 Mycroft/Picroft 系統(tǒng)。

然后我們創(chuàng)建一個(gè)名為commandValue的整數(shù)變量。我們的客戶(hù)端將傳入一個(gè)參數(shù)值。在這種情況下,參數(shù)值將是 1 或 0,具體取決于客戶(hù)端是否希望打開(kāi)或關(guān)閉燈。在瀏覽器窗口中,這看起來(lái)像:

http://176.16.254.1/lamp?cmd=1 
or
http://176.16.254.1/lamp?cmd=0

還記得我們創(chuàng)建了/lamp資源路徑來(lái)處理這個(gè)嗎?當(dāng)遵循此資源路徑時(shí),調(diào)用來(lái)處理它的函數(shù)可以訪問(wèn)使用server.arg()函數(shù)發(fā)送的參數(shù)和值。在我們的例子中,只有一個(gè)叫做cmd:

commandValue = (server.arg("cmd")).toInt(); 

首先,當(dāng)然,我們檢查以確??蛻?hù)端發(fā)送了一個(gè)參數(shù),如果沒(méi)有使用我們的消息變量將錯(cuò)誤消息發(fā)送回客戶(hù)端。有更好的方法來(lái)處理這個(gè)問(wèn)題,但是由于我們正在創(chuàng)建客戶(hù)端和它將發(fā)送的命令,所以現(xiàn)在這已經(jīng)足夠好了。cmd參數(shù)值作為字符串類(lèi)型接收為了在非常優(yōu)雅的switch/case控制結(jié)構(gòu)中有效地使用它,我們使用 String 類(lèi)的toInt() 函數(shù)將其轉(zhuǎn)換為整數(shù)類(lèi)型。然后我們可以執(zhí)行與打開(kāi)或關(guān)閉燈對(duì)應(yīng)的代碼:

switch(commandValue) 
{ 
  case 0: 
   currentColor = 0; 
   setLampColor(); 
   break; 
  case 1: 
   currentColor = 1; 
   setLampColor(); 
   break; 
  default: 
   message = "choose from 0, 1 for lamp off/on"; 
   break;      
} 

這里有兩個(gè)重點(diǎn)。首先,如果客戶(hù)端應(yīng)該發(fā)送一個(gè)無(wú)意義的cmd參數(shù)值,我們將向客戶(hù)端發(fā)送一條錯(cuò)誤消息。其次,我們使用一個(gè)名為currentColor的狀態(tài)變量來(lái)設(shè)置和跟蹤當(dāng)前的燈顏色。在打開(kāi)或關(guān)閉燈的情況下,這將分別是白色或黑色。使用這種方法,我們可以將setLampColor()重新用于開(kāi)/關(guān)和特定顏色設(shè)置。變量currentColor不僅充當(dāng)燈泡的狀態(tài)變量,而且還是新像素顏色對(duì)象數(shù)組的索引

如果您遵循所有這些,您可以設(shè)計(jì)自己的 Web 服務(wù)器以嵌入任何 8266 項(xiàng)目并制作連接的東西!

客戶(hù)

現(xiàn)在 Web 服務(wù)器已經(jīng)啟動(dòng)并運(yùn)行,我們可以在 python 中開(kāi)發(fā)客戶(hù)端。

正如我們?cè)谏厦婵吹降?,我們可以使?Web 瀏覽器作為我們的客戶(hù)端,甚至可以編寫(xiě)我們自己的自定義 HTML/Javascrip/CSS 頁(yè)面來(lái)與之交互。我們也可以編寫(xiě)自己的 python 腳本來(lái)做同樣的事情。只要運(yùn)行它的計(jì)算機(jī)可以訪問(wèn)您的網(wǎng)絡(luò),您就可以開(kāi)展業(yè)務(wù)。然后,您可以在 Mycroft 中實(shí)施技能之前測(cè)試您希望包含在語(yǔ)音技能中的大部分功能。

如果您熟悉使用 Mycroft 技能,則不必編寫(xiě)腳本來(lái)測(cè)試 Mycroft 之外的客戶(hù)端功能。Mycroft 技能中的大部分動(dòng)作發(fā)生在技能的__init__.py文件中。您可以在此文件中實(shí)現(xiàn) python 代碼寫(xiě)入并從那里進(jìn)行調(diào)試。由你決定!

請(qǐng)求和物聯(lián)網(wǎng)演示技能

如果您還沒(méi)有創(chuàng)建自己的技能,我建議您查看以下資源:

看完這些后,繼續(xù)學(xué)習(xí)你自己的“Hello World”技能并開(kāi)始運(yùn)行吧!以下不是技能設(shè)計(jì)和實(shí)施的綜合教程,只是亮點(diǎn)和一些見(jiàn)解。

一切由此開(kāi)始:

import requests

如果你能在你的樹(shù)莓派上用 python 做到這一點(diǎn),你可以在 Mycroft 下用你的聲音來(lái)控制它!

使用 python 與我們的 Web 服務(wù)器交互的關(guān)鍵是Requests: HTTP for Humans庫(kù)。沒(méi)有什么比他們自己的描述更能描述這個(gè)庫(kù)了:

Requests 是一個(gè)優(yōu)雅而簡(jiǎn)單的 Python HTTP 庫(kù),專(zhuān)為人類(lèi)構(gòu)建。

它是為人類(lèi)使用而設(shè)計(jì)和建造的!我們將使用這個(gè)庫(kù)在語(yǔ)音控制下與我們的物聯(lián)網(wǎng)設(shè)備進(jìn)行通信。該庫(kù)將允許我們?cè)谖覀兊?python 意圖代碼中簡(jiǎn)單地復(fù)制上面討論的 http 命令。

IoT 演示技能將由 3 個(gè)意圖組成:

def handle_lamp_command_intent(self, message):
def handle_lamp_color_intent(self, message):
def handle_feeder_intent(self,message):

這些意圖中的每一個(gè)都將對(duì)應(yīng)于我們服務(wù)器上的一個(gè)路由(根路由除外)。它不必是這樣,也許這不是最有效的設(shè)計(jì),但它有效,我現(xiàn)在會(huì)堅(jiān)持下去。

在 initialize() 函數(shù)中注冊(cè)意圖:

lamp_color_intent = IntentBuilder("LampColorIntent").require("LampColorKeyword").require("ColorName").build()
	self.register_intent(lamp_color_intent, self.handle_lamp_color_intent)

請(qǐng)務(wù)必注意,此意圖將使用LampColorKeyword.voc文件將話(huà)語(yǔ)與此特定意圖相匹配。該文件如下所示:

change
make

這就是說(shuō),“嘿,Mycroft,讓顏色變成粉紅色?!?這不是很理想,但我在為這個(gè)意圖創(chuàng)建正確的用語(yǔ)并讓它識(shí)別這樣的短語(yǔ)時(shí)遇到了一些困難。當(dāng)我更多地了解意圖及其與 vocab 或 .voc 文件的關(guān)系時(shí),在我看來(lái),這些意圖是由構(gòu)成話(huà)語(yǔ)的關(guān)鍵詞組成的,而不是完整的話(huà)語(yǔ)。我認(rèn)為這可能會(huì)引起對(duì)重疊關(guān)鍵字沖突的擔(dān)憂(yōu)。我發(fā)現(xiàn)并繼續(xù)發(fā)現(xiàn)以下資源是我繼續(xù)理解意圖、關(guān)鍵字等的關(guān)鍵:

當(dāng)我們改變燈的顏色時(shí),我們需要能夠響應(yīng)用戶(hù)請(qǐng)求的顏色。這是通過(guò)使用正則表達(dá)式完成的。文件lampactions.rx如下所示:

(turn|switch) (?Pon|off) (?P.*)
(change|make) (?Pcolor|color to) (?P.*)

如果 btoharye 看到這個(gè),他會(huì)注意到他的家庭助理工作有一些相似之處!

第二條線是我們的重點(diǎn)。這個(gè)正則表達(dá)式將允許我們?cè)谙⒖偩€上通過(guò)變量名稱(chēng)ColorName 傳遞用戶(hù)命名的顏色。通過(guò)匹配單詞changemake來(lái)進(jìn)行匹配我目前沒(méi)有使用Action變量。

def handle_lamp_color_intent(self, message):	
	lamp_color = message.data.get("ColorName")
	LOGGER.info("Lamp Color: " + lamp_color)
	if self.color_map.has_key(lamp_color):
		self.speak_dialog("lamp.color",{"color": lamp_color})
		color_index = self.color_map[lamp_color]
		r = requests.get('http://ip_here/color?color='+str(color_index))
	else:
		self.speak_dialog("lamp.color.error",{"color": lamp_color})

我們可以創(chuàng)建函數(shù)處理程序并使用參數(shù)消息從用戶(hù)的話(huà)語(yǔ)中獲取命名的顏色:

 def handle_lamp_color_intent(self, message):	
	lamp_color = message.data.get("ColorName")

LOGGER 對(duì)象將這些語(yǔ)句打印到 /var/log/mycroft-skills.log。另一種調(diào)試方法是讓 Mycroft 使用 self.speak_dialog() 函數(shù)說(shuō)話(huà)。在此之前,我正在單獨(dú)編寫(xiě) python 技能功能,并將該代碼放入__init__.py文件中。但是,熟悉“在”Mycroft 本身內(nèi)進(jìn)行調(diào)試會(huì)為您節(jié)省一些時(shí)間,我建議您轉(zhuǎn)向這種方法。

LOGGER.info("Lamp Color: " + lamp_color)

在這之前,我們創(chuàng)建了一個(gè)名為color_map 的 python 地圖:

def __init__(self):
      . . .
    self.color_map = {'black': 0, 'white': 1, 'blue': 2, 'green': 3, 'orange': 4, 'red': 5, 'purple': 8, 'yellow': 9, 'pink': 10}

這種方法允許我們獲取 ColorName 話(huà)語(yǔ)并將其用作訪問(wèn)相應(yīng)顏色值以發(fā)送到 ESP8266 Dev Thing 的鍵。從草圖中的這段代碼可以看出,顏色鍵值和顏色索引匹配。

// From the sketch file running on the ESP8266 board
void setStandardColors() 
{ 
 black   = neoRing.Color(0,0,0); //used for 'off' state 
 white   = neoRing.Color(255,255,255); 
 blue    = neoRing.Color(0,0,255); 
 green   = neoRing.Color(255,0,0); 
 orange  = neoRing.Color(140,255,0); 
 red     = neoRing.Color(0,255,0); 
 red_orange  = neoRing.Color(69,255,0); 
 sky_blue    = neoRing.Color(206,135,235); 
 purple      = neoRing.Color(0,255,255); 
 yellow      = neoRing.Color(255,255,0); 
 pink        = neoRing.Color(0,255,180); 
 standardColors[0] = black; 
 standardColors[1] = white; 
 standardColors[2] = blue; 
 standardColors[3] = green; 
 standardColors[4] = orange; 
 standardColors[5] = red; 
 standardColors[6] = red_orange; 
 standardColors[7] = sky_blue; 
 standardColors[8] = purple; 
 standardColors[9] = yellow; 
 standardColors[10] = pink; 
} 

這使得發(fā)送顏色消息變得容易,尤其是當(dāng)我們使用請(qǐng)求庫(kù)時(shí)!

if self.color_map.has_key(lamp_color):
	self.speak_dialog("lamp.color",{"color": lamp_color})
	color_index = self.color_map[lamp_color]
	r = requests.get('http://ip_here/color?color='+str(color_index))

無(wú)論您在哪里看到 ip_here ,都將其替換為您的板 IP 地址。未來(lái)版本將在 settings.json文件中包含此內(nèi)容。

在沒(méi)有與可用顏色匹配的鍵的情況下,我們使用lamp.color.error.dialog文件中的錯(cuò)誤對(duì)話(huà)框報(bào)告此情況。我們可以通過(guò)重復(fù)請(qǐng)求的顏色來(lái)幫助用戶(hù),并提供一些有效的選項(xiàng)(有關(guān)更多信息,請(qǐng)參見(jiàn)下文)。

sorry {{color}} not available maybe try red green or blue
sorry {{color}} not available maybe try orange yellow or purple
{{color}} is not an option you can try red green or blue instead
{{color}} is not an option you can try purple orange or yellow
sorry could you try purple blue or orange instead of {{color}}
sorry could you try red yellow or green instead of {{color}}

聲音設(shè)計(jì)

?

有這么多顏色!您怎么知道要嘗試哪個(gè),以及我們?nèi)绾卧谔峁┯杏媒ㄗh的同時(shí)避免認(rèn)知超負(fù)荷。. .這就是語(yǔ)音接口的挑戰(zhàn)。

當(dāng) Mycroft 無(wú)法識(shí)別所請(qǐng)求的顏色時(shí),例如“chartreuse”,它會(huì)回復(fù)一個(gè)包含 3 個(gè)備選顏色的列表。這三種選擇是一種很好的方式,不僅可以讓用戶(hù)知道一些有效的選項(xiàng),還可以引導(dǎo)用戶(hù)使用基本的顏色請(qǐng)求。所有可用顏色選項(xiàng)的綜合列表將無(wú)法處理并且占用太多時(shí)間。

sorry {{color}} not available maybe try red green or blue
sorry {{color}} not available maybe try orange yellow or purple
... 

當(dāng)我反思良好的聲音設(shè)計(jì)時(shí),我不喜歡這里的短語(yǔ):“..maybe try”?設(shè)備不應(yīng)該知道它知道什么顏色嗎?跛腳,我知道,我會(huì)擺脫這個(gè)。. .

此外,這些替代方案在.dialog 文件中進(jìn)行了“硬”編碼。未來(lái)的重構(gòu)可能會(huì)受益于從可用的顏色中證明 3 種隨機(jī)顏色。另一個(gè)選項(xiàng),可以提供更大的智能和響應(yīng)能力,是讓 Mycroft 提供 2 或 3 種顏色選項(xiàng),在色調(diào)上與請(qǐng)求的選項(xiàng)最接近。

目前 Mycroft 不直接支持多輪對(duì)話(huà):

Mycroft 是否支持多回合/會(huì)話(huà)技能?
這是一個(gè)進(jìn)展中的工作。在當(dāng)前的主線中,有能力告訴 Mycroft 在說(shuō)完任何話(huà)后立即聽(tīng)。在技??能中,您可以使用...調(diào)用它self.speak("utterance", expect_response=True) ...請(qǐng)參閱https://github.com/MycroftAI/mycroft-core/blob/dev/mycroft/skills/core.py#L3262)
這只允許用戶(hù)與 Mycroft 對(duì)話(huà),而不必說(shuō)“Hey Mycroft”。
對(duì)于真正的對(duì)話(huà)交互,有一些正在進(jìn)行的工作來(lái)實(shí)現(xiàn) converse() 方法。這是即將到來(lái)的拉取請(qǐng)求:https ://github.com/MycroftAI/mycroft-core/pull/9253
這將允許技能在調(diào)用 Adapt 意圖解析器之前預(yù)覽話(huà)語(yǔ)。只有最近使用的技能會(huì)收到 converse() 通知,并按使用順序傳遞給他們。因此,您可以編寫(xiě)執(zhí)行以下操作的技能:
@intent_handler(IntentBuilder().require('alarm').require('cancel').build()) def handle_cancel_alarm(): self.speak("are you sure you want to cancel?", expect_response=True) def converse(self, utterances,): if utterances == "yes": # do whatever self.speak("Alarm canceled")
這顯然是頭腦簡(jiǎn)單,但使用此代碼,以下交互將起作用:
用戶(hù):嘿,Mycroft,請(qǐng)取消鬧鐘 Mycroft:你確定要取消嗎? 用戶(hù):Mycroft:警報(bào)取消
未來(lái)將會(huì)有更多的工具讓建立和管理對(duì)話(huà)變得更容易,但這是基礎(chǔ)。

在這里,當(dāng)我們請(qǐng)求未知顏色時(shí),從用戶(hù)體驗(yàn)的角度來(lái)看,多輪方法將是理想的。

3D 打印

您可以在我的文章 BLElectric Light 101中了解 3D 打印以及如何將組件組合在一起。我想在此重申 Lulzbot mini 能夠在沒(méi)有支撐的情況下將燈泡打印為單個(gè)單元。試試吧,它可以工作,讓您的印后整理變得更加輕松!

該設(shè)計(jì)

?
pYYBAGOYPtSAbKyoAAbOvw4UknQ480.jpg
我建議將 TB6612 替換為適用于所有羽毛板的 adafruit 直流電機(jī) + 步進(jìn) FeatherWing 插件。

結(jié)論

希望你喜歡這個(gè)項(xiàng)目。. .更多在路上!


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

評(píng)論

查看更多

下載排行

本周

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

本月

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

總榜

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