資料介紹
描述
介紹和動(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ò)匹配單詞change或make來(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ì)
結(jié)論
希望你喜歡這個(gè)項(xiàng)目。. .更多在路上!
- 節(jié)日花環(huán)自動(dòng)化開(kāi)源項(xiàng)目
- 家庭自動(dòng)化系統(tǒng)開(kāi)源構(gòu)建
- 樹(shù)莓派家庭自動(dòng)化開(kāi)源
- 使用電報(bào)機(jī)器人進(jìn)行自動(dòng)化開(kāi)源
- 溫室自動(dòng)化開(kāi)源硬件
- 照明自動(dòng)化開(kāi)源分享
- 濾光輪自動(dòng)化開(kāi)源項(xiàng)目
- 家庭自動(dòng)化系統(tǒng)開(kāi)源分享
- 哈利波特式的家庭自動(dòng)化開(kāi)源
- 植物澆水自動(dòng)化開(kāi)源分享
- ESP32家庭自動(dòng)化開(kāi)源分享
- 家庭自動(dòng)化開(kāi)源分享
- 舊電腦UPS的家電自動(dòng)化開(kāi)源分享
- PCB家庭自動(dòng)化開(kāi)源分享
- 機(jī)器人自動(dòng)化開(kāi)展應(yīng)用資料包 0次下載
- 自動(dòng)化焊接機(jī)器人:引領(lǐng)制造業(yè)未來(lái)的高效工具 333次閱讀
- 工業(yè)自動(dòng)化中的控制方式 470次閱讀
- 工業(yè)自動(dòng)化和自動(dòng)化區(qū)別是什么 1030次閱讀
- 過(guò)程自動(dòng)化控制和運(yùn)動(dòng)自動(dòng)化控制的原理詳解 1350次閱讀
- Selenium在自動(dòng)化中有何用處 1612次閱讀
- 基于PlatformIO IDE的家庭自動(dòng)化系統(tǒng)設(shè)計(jì)方案實(shí)現(xiàn) 2297次閱讀
- 基于Raspberry Pi Pico開(kāi)發(fā)先進(jìn)的家庭自動(dòng)化系統(tǒng) 2849次閱讀
- 如何自學(xué)PLC與自動(dòng)化? 2567次閱讀
- 什么是非標(biāo)自動(dòng)化設(shè)備及分類(lèi)介紹 4.2w次閱讀
- 非標(biāo)自動(dòng)化設(shè)備的分類(lèi) 6280次閱讀
- ATE自動(dòng)化測(cè)試系統(tǒng)是什么_ATE自動(dòng)化測(cè)試系統(tǒng)介紹 3.2w次閱讀
- 自動(dòng)化領(lǐng)域初涉水 非標(biāo)自動(dòng)化和自動(dòng)化到底有哪些區(qū)別? 6089次閱讀
- jenkins自動(dòng)化部署 4558次閱讀
- 紅帽推出Ansible 2.2 :為開(kāi)源自動(dòng)化框架奠定牢靠的基礎(chǔ) 984次閱讀
- 意法半導(dǎo)體:家庭自動(dòng)化完全解決方案 1046次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開(kāi)發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多