資料介紹
描述
抽象的
辦公室、餐廳、圖書(shū)館有許多共享工作空間。人們來(lái)來(lái)去去。在這次 COVID-19 大流行中,我們需要確保這些工作空間在其他人來(lái)使用它們之前是清潔和消毒的。該項(xiàng)目將應(yīng)用 AWS IOT 技術(shù)和 H/W M5Stack CORE2 for AWS 來(lái)控制機(jī)器人在人們離開(kāi)工作區(qū)后噴灑酒精并用 UV-C 燈清潔地板。
項(xiàng)目描述
我們計(jì)劃建造一個(gè)小型機(jī)器人,它可以噴灑微滴酒精,同時(shí)機(jī)器人會(huì)攜帶紫外線消毒器,以確保工作空間的清潔和安全。用戶通過(guò)掃描餐桌上的二維碼開(kāi)始使用工作區(qū),完成后只需按下移動(dòng) Web 上的“完成”按鈕。AWS IOT 將計(jì)算使用持續(xù)時(shí)間并命令機(jī)器人開(kāi)始使用 UV-C 射線和酒精噴霧進(jìn)行清潔。同時(shí),此用法將保留在 Dynamo DB 中。如果感染了 COVID-19 的人以前使用過(guò)此工作區(qū),此數(shù)據(jù)庫(kù)將用于歷史跟蹤。
(注意***我們計(jì)劃使用 PIR 傳感器來(lái)檢測(cè)人來(lái)并使用 Alexa 來(lái)獲取用戶的姓名。但是 PIR 傳感器非常不可靠,用戶需要一直坐在桌旁,這不實(shí)用。對(duì)于 Alexa , 沒(méi)有簡(jiǎn)單的方法將語(yǔ)音轉(zhuǎn)換為文本。由于時(shí)間限制,我們選擇將解決方案與建議的解決方案稍微改變一下。)
系統(tǒng)架構(gòu)
這個(gè)項(xiàng)目有兩個(gè)部分。
1)客戶端,使用M5 stack Core 2來(lái)控制所有機(jī)器人的動(dòng)作,如前進(jìn)、后退、左右轉(zhuǎn)、噴酒精和控制紫外線。檢查所有傳感器以防止與物體碰撞和跌倒檢測(cè)。當(dāng)用戶使用完工作區(qū)后,該機(jī)器人將由 AWS IOT 控制。AWS IOT 會(huì)將工作區(qū)占用標(biāo)志更新為 false(意味著工作區(qū)現(xiàn)在可用) CORE2 將更新使用時(shí)間并開(kāi)始機(jī)器人清潔。完成清潔后,機(jī)器人將停止工作,工作空間可供下一個(gè)人使用。
2)服務(wù)器端使用AWS上的一些服務(wù)。用戶開(kāi)始掃描桌面上顯示的二維碼注冊(cè)姓名。該網(wǎng)站是一個(gè)簡(jiǎn)單的靜態(tài)網(wǎng)站,存儲(chǔ)在 Amazon S3 AWS 上。當(dāng)用戶按下注冊(cè)按鈕時(shí),javascript會(huì)將信息傳遞給存儲(chǔ)在API網(wǎng)關(guān)上的Restful API。API 網(wǎng)關(guān)將調(diào)用 AWS lambda 在 AWS IOT 上更新設(shè)備或獲取設(shè)備影子的設(shè)備狀態(tài)。AWS IOT 更新工作區(qū)和機(jī)器人的狀態(tài),并在用戶使用完工作區(qū)后發(fā)布到 Dynamo DB。
我們可以用下圖總結(jié)所有活動(dòng)
先決條件
因?yàn)檫@個(gè)項(xiàng)目需要很多技術(shù)的基礎(chǔ)。通過(guò)完成以下教程,您應(yīng)該熟悉這些技術(shù)。
- AWS 服務(wù)(S3、API 網(wǎng)關(guān)、Lampda、AWS IOT)您可能需要查看每項(xiàng)服務(wù)的教程。這些 AWS 服務(wù)的 Google 教程。
- 熟悉platformIO和Core2forAWS的開(kāi)發(fā)環(huán)境。轉(zhuǎn)到https://edukit.workshop.aws/en/getting-started.html以獲取教程,按照說(shuō)明直到主題 3 智能恒溫器。這將確保您可以連接到 AWS 服務(wù)并通過(guò)所有安全檢查。我們的項(xiàng)目是從這個(gè)項(xiàng)目擴(kuò)展而來(lái)的。
- 從 S3 -> API-> Lampda->AWS IOT 的應(yīng)用流程。本教程對(duì)于讓您了解每個(gè) AWS 服務(wù)之間的流程非常有用。https://iot-esp32.workshop.aws/en/module3.html項(xiàng)目實(shí)施
硬件實(shí)現(xiàn)
對(duì)于硬件構(gòu)建,我們需要添加額外的兩個(gè) M5stack 模塊(M5Stack DC Motor 和 M5Stack Proto)DC 電機(jī)模塊帶有四個(gè)用于樂(lè)高電機(jī)的連接器,非常適合我們的快速原型。我們使用原型模塊將 CORE2 總線連接到 14 針插座。這些模塊可以按順序堆疊,但要注意堆疊的順序
Core 2 --> Proto --> DC Motor --> M5GO2(自帶core2)
************************************使用 < > 查看更多圖片 ********* ************************
我們?cè)谶@個(gè)項(xiàng)目中使用的端口是
- 用于 UV-C LED 的 GPIO32
- GPIO27 酒精噴霧
- 用于紅外傳感器的 GPIO13、GPIO36
- GPIO 33、26 用于跌倒檢測(cè)
- 用于 PIR 的 GPIO 19
- GPIO3、GPIO1、GPIO35(未使用)
- 5V引腳
- 3V引腳
- 接地引腳
在 Core2 上使用 GPIO 對(duì)我來(lái)說(shuō)非常棘手。您需要考慮許多限制。這是我可以從數(shù)據(jù)表中收集的一些信息。
- 應(yīng)避免使用這些端口 GPIO1、GPIO3、GPIO12、GPIO15,因?yàn)樗鼈兛赡苡糜谡{(diào)試和閃存。
- 端口 34 - 39 只能用于 I/P,沒(méi)有上拉/下拉
- 端口不是 5V 容差,這意味著如果您的傳感器是 5V 傳感器類型,您需要使用電平轉(zhuǎn)換器。并且某些電平轉(zhuǎn)換器無(wú)法正常工作,如果您想避免出現(xiàn)問(wèn)題,請(qǐng)確保購(gòu)買優(yōu)質(zhì)的。
對(duì)于電平轉(zhuǎn)換器,我將它放在一個(gè)單獨(dú)的盒子中,其中包括 PIR 傳感器、繼電器模塊以及傳感器和外圍設(shè)備的所有連接,如圖所示。
有兩個(gè)設(shè)備需要兩個(gè)繼電器來(lái)打開(kāi)/關(guān)閉。因?yàn)槲覀兪褂迷谑袌?chǎng)上銷售的商業(yè)廣告。需要進(jìn)行一些修改。
酒精噴霧
我們使用便攜式酒精噴霧,只需 2 美元即可輕松購(gòu)買。本設(shè)備配有內(nèi)置電池。我們只是從按鈕開(kāi)關(guān)并聯(lián)到我們的插座,如圖所示。
UV-C LED
請(qǐng)注意,并非所有的紫外線都能殺死病毒。您需要使用比普通 UV Led 更昂貴的 UV-C 產(chǎn)品。UV-C 對(duì)眼睛和皮膚有危險(xiǎn)。請(qǐng)確保您在實(shí)驗(yàn)過(guò)程中不要暴露在這種光線下。我買了手機(jī)UV-C盒子,取出UV-C模塊。對(duì)于這個(gè)模塊,我需要連接外部電池(1x 18650 Battery 3.7V)因?yàn)殡姵卦诤凶永锾罅恕?/font>如圖所示,我從啟動(dòng)開(kāi)關(guān)到插座并聯(lián)接線。
電池盒
核心 2 無(wú)法為兩個(gè)電機(jī)提供足夠的電力。我們需要一個(gè)單獨(dú)的電池來(lái)驅(qū)動(dòng)直流電機(jī)。我為 2x 18650 選擇電池盒。這將連接到直流電機(jī)模塊。您必須使用 3.7 V 的電池來(lái)驅(qū)動(dòng) UV-C 模塊。我沒(méi)有這個(gè)的照片。您可以選擇任何您喜歡的電池盒。
機(jī)器人框架
因?yàn)槲覀兪褂脴?lè)高電機(jī),所以我選擇使用樂(lè)高構(gòu)建機(jī)器人框架。如果你不是樂(lè)高迷。您可以根據(jù)可用的材料和想象力選擇任何電機(jī)和框架。這是我使用樂(lè)高的機(jī)器人框架的圖片。
傳感器
在這個(gè)項(xiàng)目中使用了四個(gè)傳感器,兩個(gè)在前面用于跌倒檢測(cè)和碰撞檢測(cè),另外兩個(gè)在后面。我使用兩種不同類型的紅外傳感器進(jìn)行跌倒檢測(cè)和碰撞。如圖所示。
使其與樂(lè)高兼容。我把樂(lè)高板貼在傳感器的背面。對(duì)于這個(gè)技巧,您可以使用小塑料蓋作為盒子的家用電燈開(kāi)關(guān)。
完成所有接線并安裝所有傳感器、組件。這是消毒機(jī)器人的最終說(shuō)明。
軟件實(shí)施
軟件實(shí)現(xiàn)有很多部分。了解更多概念。您可能需要開(kāi)始學(xué)習(xí)這兩個(gè)教程
- 了解有關(guān)此項(xiàng)目中使用的 AWS IOT 概念和工具的更多信息。
https://iot-esp32.workshop.aws/en/introduction.html
- 了解有關(guān)許多 AWS 服務(wù)流程的更多信息。
https://iot-esp32.workshop.aws/en/module3.html
更完整的源碼請(qǐng)到github https://github.com/wtos03/HealthySpaces
我將僅提取一些代碼片段以進(jìn)行解釋。
網(wǎng)頁(yè)
該頁(yè)面將用于注冊(cè)工作區(qū),如下圖所示
用戶開(kāi)始選擇注冊(cè)地點(diǎn)。此選項(xiàng)菜單將幫助將名稱轉(zhuǎn)換為 AWS IOT 中使用的事物名稱。
<select name="roomNames" >
<option value="0123a8024945e75c01"> Binary Roomoption>
<option value="TT"> Analog Roomoption>
select>
用戶輸入姓名并按注冊(cè)按鈕后。網(wǎng)頁(yè)將發(fā)布帶有 Jason 格式數(shù)據(jù)的請(qǐng)求(工作空間狀態(tài)的名稱和 wsOccupancy 標(biāo)志)以預(yù)定義 Web API 影子狀態(tài)(參見(jiàn) url:下面)
$("#register").click(function(event){
currentvalue = document.getElementById('register').innerHTML;
yourName = document.getElementById('name').value;
// trying to add the value from text box
thingName = document.getElementById("roomNames").value;
console.log(thingName);
var mydata={"action":"on","wsOccupancy":true,"userName":yourName, "thingname":thingName};
console.log(mydata);
document.getElementById("status").innerHTML= `Workspace Usage : ${yourName}`;
document.getElementById("status").setAttribute("class","button is-rounded is-large is-fullwidth is-loading");
$.ajax( {
type: 'POST',
url:'https://u2gtqb6j39.execute-api.us-west-2.amazonaws.com/Dev/shadow-state',
contentType: 'application/json',
crossDomain: true,
processData: false,
dataType: "json",
data: JSON.stringify(mydata),
success:function(data) {
console.log(" on success");
document.getElementById("status").setAttribute("class","button is-success is-rounded is-large is-fullwidth");
},
error:function(data) {
console.log(" on fail;");
document.getElementById("status").setAttribute("class","button is-success is-rounded is-large is-fullwidth");
}
});
});
如果用戶按下 Finished 按鈕,wsOccupancy 標(biāo)志將設(shè)置為 false 并發(fā)布到與注冊(cè)過(guò)程相同的 API。
如果用戶按下 Occupy 按鈕來(lái)檢查 Workspace 的狀態(tài),網(wǎng)頁(yè)將向預(yù)定義的 Web API 影子狀態(tài)發(fā)送獲取請(qǐng)求。此 API 將返回可用或已占用的工作區(qū)狀態(tài)。
$("#status").click(function(event){
console.log("Checking Workspace status");
//check the status of Shadow
// thingName = "ESP32"
thingName = document.getElementById("roomNames").value;
console.log(`thingname=${thingName}`);
$.ajax( {
type: 'GET',
url:'https://u2gtqb6j39.execute-api.us-west-2.amazonaws.com/Dev/shadow-state',
contentType: 'application/json',
crossDomain: true,
processData: false,
dataType: "json",
data: `thingname=${thingName}`,
success:function(data) {
console.log("success");
console.log(data.status);
document.getElementById("status").innerHTML=data.status;
if (data.status == "Available" )
{
document.getElementById("status").setAttribute("class","button is-success is-rounded is-large is-fullwidth");
}
else{
document.getElementById("status").setAttribute("class","button is-danger is-rounded is-large is-fullwidth");
}
},
error:function(data) {
console.log("error");
}
});
});
靜態(tài)網(wǎng)頁(yè)的優(yōu)點(diǎn)是您可以在任何支持Javascript的網(wǎng)絡(luò)瀏覽器下在本地網(wǎng)頁(yè)上運(yùn)行它。無(wú)需 Web 服務(wù)器托管此服務(wù)。但是要分享這個(gè)網(wǎng)頁(yè),我們可以上傳到 S3 存儲(chǔ)桶并將它們標(biāo)記為靜態(tài)網(wǎng)頁(yè)。通過(guò)將此文件 (index.html) 上傳到 S3 存儲(chǔ)桶并啟用為靜態(tài)網(wǎng)站托管。定義公共訪問(wèn)權(quán)限或僅特定組的權(quán)限。并復(fù)制 Bucket 網(wǎng)站端點(diǎn)以在網(wǎng)頁(yè)上使用。在這個(gè)例子中是
http://cleanws.com.s3-website-us-west-2.amazonaws.com
我們可以翻譯此 URL 以創(chuàng)建 QR 碼或放入 NFC 標(biāo)簽,以供人們來(lái)到工作區(qū)時(shí)訪問(wèn)。
蘭普達(dá)功能
在創(chuàng)建 API 網(wǎng)關(guān)之前,我們需要先創(chuàng)建 Lampda。因?yàn)?API 需要 Lampda 函數(shù)名指向。
我們需要?jiǎng)?chuàng)建兩個(gè) Lampda 函數(shù)
- Shadow_Status_Check 此函數(shù)通過(guò)獲取 wsOccupancy 標(biāo)志的值來(lái)檢查 AWS IOT 的狀態(tài)。如果 true 將返回值“Occupied”以顯示在網(wǎng)頁(yè)上。如果 false 將返回值“可用”。該標(biāo)志將從報(bào)告的影子狀態(tài)中讀取。
- Shadow_Update 此函數(shù)使用 wsOccupancy 和 userName 的值更新 IOT 設(shè)備影子的狀態(tài)。
這些源代碼是用 python 3.8 編寫(xiě)的。確保這兩個(gè)功能有權(quán)訪問(wèn) AWS IOT 服務(wù)(在左側(cè)的配置和權(quán)限選項(xiàng)卡下
所有源代碼都位于 LampdaFunctions 目錄下
API網(wǎng)關(guān)
讓網(wǎng)頁(yè)輕松訪問(wèn) AWS IOT 服務(wù)。我們可以定義連接到 Lampda 函數(shù)的 API。Lampda 功能可以連接到 AWS IOT 服務(wù)。我們無(wú)法創(chuàng)建 Web API 來(lái)直接連接到 AWS IOT。(我不知道原因,但我認(rèn)為這是安全問(wèn)題)要?jiǎng)?chuàng)建 API,您需要?jiǎng)?chuàng)建資源影子狀態(tài)和兩個(gè)方法 get 和 post。
“獲取方法”鏈接到“Shadow_Status_Check”Lampda 函數(shù)。
“發(fā)布方法”鏈接到“Shadow_Update Lampda”功能。
?
AWS 物聯(lián)網(wǎng)
我們沒(méi)有在 AWS IOT 服務(wù)器上進(jìn)行太多配置。大多數(shù)在客戶端完成的任務(wù)都是由 CORE2 模塊完成的。確保正確設(shè)置所有配置和安全性。在開(kāi)始這部分工作之前,請(qǐng)?jiān)?/font>https://edukit.workshop.aws/en/getting-started.html運(yùn)行這兩個(gè)教程 Cloud Connected Blinky 和 ??Smart Thermostat 。
ThingName 將使用每個(gè)設(shè)備唯一的設(shè)備 ID 自動(dòng)創(chuàng)建。
CORE 2 將開(kāi)始連接 AWS IOT Shadow 服務(wù)并在數(shù)據(jù) userName 和 wsOccupancy 標(biāo)志上注冊(cè)增量更改
// register delta callback for workSpaceActuator and nameActuator
rc = aws_iot_shadow_register_delta(&iotCoreClient, &nameActuator);
if(SUCCESS != rc) {
ESP_LOGE(TAG, "Shadow Register userName Delta Error");
}
rc = aws_iot_shadow_register_delta(&iotCoreClient, &workSpaceActuator);
if(SUCCESS != rc) {
ESP_LOGE(TAG, "Shadow Register wsOccupancy Delta Error");
}
這兩個(gè) Actuator 將注冊(cè)回調(diào)函數(shù),如下面的數(shù)據(jù)結(jié)構(gòu)。
jsonStruct_t nameActuator;
nameActuator.cb = userName_Callback;
nameActuator.pKey = "userName";
nameActuator.pData = &userName;
nameActuator.type = SHADOW_JSON_STRING;
nameActuator.dataLength = MAX_NAME_LENGTH;
jsonStruct_t workSpaceActuator;
workSpaceActuator.cb = occupancy_Callback;
workSpaceActuator.pKey = "wsOccupancy";
workSpaceActuator.pData = &wsOccupancy;
workSpaceActuator.type = SHADOW_JSON_BOOL;
workSpaceActuator.dataLength = sizeof(bool);
計(jì)算開(kāi)始和停止使用時(shí)間之間的時(shí)間差。我們需要先正確設(shè)置時(shí)間。為了方便設(shè)置和方便,我們使用 ntp 協(xié)議來(lái)設(shè)置時(shí)間,它在 ntptime.h 中定義并在 ntptime.c 中實(shí)現(xiàn)。當(dāng) CORE2 將 wsOccupancy 的更新 delta 狀態(tài)從 false 變?yōu)?true 時(shí),CORE2 將在 LED 條上打開(kāi)紅色,獲取 startUsagetime 并將 robotStatus 更改為“Stop Clean”
if (*(bool *)(pContext->pData)) //True mean workspace is used
{
Core2ForAWS_Sk6812_SetSideColor(SK6812_SIDE_LEFT, 0xFF0000);
Core2ForAWS_Sk6812_SetSideColor(SK6812_SIDE_RIGHT, 0xFF0000);
Core2ForAWS_Sk6812_Show();
// Add starttime
getTimeStructure(&startTime);
strftime(startUsageTime, sizeof(startUsageTime), "%c", &startTime);
ESP_LOGI(TAG, "The current date/time in Thailand is: %s", startUsageTime);
strcpy(robotStatus,"Stop Clean");
}
如果用戶使用完工作區(qū)。wsOccupancy 的 delta 標(biāo)志將從 true 變?yōu)?false,這將觸發(fā)獲取 stopUsageTime,以 HH:MM 格式計(jì)算時(shí)間差,停止 LED 條并將機(jī)器人狀態(tài)更改為“開(kāi)始清潔”
else
{
Core2ForAWS_Sk6812_Clear();
Core2ForAWS_Sk6812_Show();
// Add stoptime
getTimeStructure(&stopTime);
strftime(stopUsageTime, sizeof(stopUsageTime), "%c", &stopTime);
ESP_LOGI(TAG, "The current date/time in Thailand is: %s", stopUsageTime);
// Find time difference
diffTimePeriod (stopTime,startTime,&diffTime);
sprintf(durationTime,"%d Hr: %d Min: %d Sec",diffTime.tm_hour,diffTime.tm_min,diffTime.tm_sec);
ESP_LOGI(TAG, "The workspace usage time is: %s \n", durationTime);
strcpy(robotStatus,"Start Clean");
}
CORE2 將在第 461 行指定的每個(gè)特定時(shí)間發(fā)送報(bào)告設(shè)備影子
vTaskDelay(pdMS_TO_TICKS(1000)); Line 461
發(fā)電機(jī)數(shù)據(jù)庫(kù)
該數(shù)據(jù)庫(kù)將繼續(xù)使用工作區(qū)。一旦用戶完成使用工作區(qū)并且 CORE2 完成計(jì)算使用時(shí)間,我們將發(fā)布到 DB。您需要為保存的數(shù)據(jù)創(chuàng)建表,定義主鍵。有關(guān)更多信息,請(qǐng)?jiān)L問(wèn)此網(wǎng)站以了解更多如何在 Dynamo DB 中存儲(chǔ)設(shè)備數(shù)據(jù)
https://docs.aws.amazon.com/iot/latest/developerguide/iot-ddb-rule.html
要發(fā)布到數(shù)據(jù)庫(kù),我們需要在左側(cè)的規(guī)則選項(xiàng)卡下定義規(guī)則來(lái)處理物聯(lián)網(wǎng)數(shù)據(jù)。規(guī)則查詢將使用 SQL 語(yǔ)句開(kāi)始發(fā)布到數(shù)據(jù)庫(kù)。這需要改進(jìn) SQL 語(yǔ)句以僅在用戶完成時(shí)發(fā)布。
SELECT state.reported.userName, state.reported.temperature, state.reported.startUsageTime, state.reported.stopUsagetime, state.reported.durationHandler FROM '$aws/things/0123a8024945e75c01/shadow/update/accepted'
機(jī)器人控制
這是我們從 aws_iot_task 注冊(cè)單獨(dú)進(jìn)程的另一個(gè)任務(wù)
xTaskCreatePinnedToCore(&robot_task, "robot_task", 2048, NULL, 3, NULL, 1);
xTaskCreatePinnedToCore(&aws_iot_task, "aws_iot_task", 4096*2, NULL, 5, NULL, 0);
robotStatus 標(biāo)志將用于控制機(jī)器人的狀態(tài)。如果用戶離開(kāi)工作區(qū),狀態(tài)將變?yōu)殚_(kāi)始清潔,機(jī)器人將開(kāi)始清潔,直到完成或其他用戶進(jìn)入。這部分尚未完全實(shí)施。當(dāng)機(jī)器人撞到東西或幾乎要??摔倒時(shí),只需簡(jiǎn)單的服務(wù),如前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)和掉頭。實(shí)現(xiàn)機(jī)器人移動(dòng)算法需要更多的時(shí)間來(lái)開(kāi)發(fā)和測(cè)試。
使用 i2c 協(xié)議的直流電機(jī)驅(qū)動(dòng)器在目錄組件 /dc-motor/m5-dcmotor.c 中實(shí)現(xiàn)
項(xiàng)目測(cè)試
因?yàn)槲业脑O(shè)備在截止日期前三天停止工作。(CORE2 無(wú)法重新編程。引導(dǎo)信息顯示 PSRAM 讀取錯(cuò)誤) 屏幕像這樣出現(xiàn)垃圾。
我不能有視頻來(lái)展示項(xiàng)目的最終工作。但是在開(kāi)發(fā)期間。所有功能(電機(jī)運(yùn)動(dòng)、傳感器。和打開(kāi)設(shè)備的繼電器都已經(jīng)過(guò)測(cè)試并且運(yùn)行良好。除了 GPIO 有時(shí)會(huì)在傳感器上讀取錯(cuò)誤。
AWS 和 CORE2 之間的邏輯已經(jīng)過(guò)測(cè)試。當(dāng)用戶按下完成按鈕時(shí)機(jī)器人開(kāi)始工作,并在發(fā)生新注冊(cè)時(shí)停止工作。唯一錯(cuò)過(guò)測(cè)試的一件事是在打開(kāi) UV-C 和酒精噴霧時(shí)進(jìn)行傳感器檢查。
正如您在此視頻中看到的,AWS 部件工作正常。
以史為鑒
我從這個(gè)項(xiàng)目中學(xué)到了一些技巧。對(duì)其他人進(jìn)一步發(fā)展而不是再次嘗試和錯(cuò)誤將是有用的。
- CORE2 中的許多設(shè)備共享相同的 i2C 總線,這有時(shí)會(huì)導(dǎo)致問(wèn)題。例如,我的直流電機(jī)控制和 MPU6886 協(xié)同工作有問(wèn)題。
- 在項(xiàng)目快完成時(shí)升級(jí)開(kāi)發(fā)環(huán)境或拉新庫(kù)是一個(gè)壞主意。這導(dǎo)致我的項(xiàng)目完全停止。我無(wú)法及時(shí)解決問(wèn)題。
- 端口 ESP32 不是 5v 容差。不能直接連接 5 V 傳感器。
- FreeRtos 取決于任務(wù)計(jì)劃。這會(huì)影響您的實(shí)時(shí)操作。我在從輸入端口讀取值以及調(diào)整時(shí)間延遲或添加更多任務(wù)時(shí)遇到問(wèn)題。我從讀取端口得到了不同的行為。
- AWS 中有很多安全設(shè)置。這給我?guī)?lái)了很多問(wèn)題,直到我決定打開(kāi)所有安全性。這將是一個(gè)很大的安全漏洞。黑客可以使用您的 API 來(lái)管理 AWS IOT。我希望亞馬遜將在安全設(shè)置方面進(jìn)行更多改進(jìn),使其集中且易于設(shè)置和理解
我希望你覺(jué)得這個(gè)項(xiàng)目很有用。建議復(fù)制并粘貼此項(xiàng)目的某些部分,以幫助您更快地開(kāi)發(fā)項(xiàng)目。我會(huì)很高興聽(tīng)到這個(gè)消息。謝謝你。
?
- 由電話控制的小型機(jī)器人
- 語(yǔ)音機(jī)器人的構(gòu)建
- 機(jī)器人的構(gòu)建
- 機(jī)器人項(xiàng)目構(gòu)建
- 構(gòu)建機(jī)器人系統(tǒng)
- 小型機(jī)載計(jì)算機(jī)電源的設(shè)計(jì)
- 基于Matlab的機(jī)構(gòu)與機(jī)器人分析資料下載 11次下載
- 基于DSP和PC的農(nóng)業(yè)機(jī)器人控制系統(tǒng) 17次下載
- 基于DSP芯片的足球機(jī)器人實(shí)現(xiàn)與設(shè)計(jì) 26次下載
- 移動(dòng)機(jī)器人的導(dǎo)航定位和地圖構(gòu)建技術(shù)綜述 22次下載
- 如何才能實(shí)現(xiàn)移動(dòng)機(jī)器人的導(dǎo)航定位和地圖構(gòu)建技術(shù) 22次下載
- 小型仿人機(jī)器人系統(tǒng)的設(shè)計(jì)資料詳細(xì)說(shuō)明 3次下載
- TMS320LF2407在小型機(jī)器人控制系統(tǒng)中的應(yīng)用 6次下載
- 基于嵌入式視覺(jué)的移動(dòng)式自重構(gòu)微小型機(jī)器人
- 微小型自主偵察機(jī)器人控制系統(tǒng)設(shè)計(jì)
- 如何構(gòu)建一個(gè)可充電酒精檢測(cè)儀 2114次閱讀
- 基于ATmega16構(gòu)建的線跟隨機(jī)器人的完整電路圖 1789次閱讀
- 如何使用DonkeyCar平臺(tái)構(gòu)建一個(gè)自主機(jī)器人 2114次閱讀
- 基于使用A4988驅(qū)動(dòng)程序和HC-05 bt模塊構(gòu)建自平衡機(jī)器人 2007次閱讀
- 基于TMS320F2812芯片實(shí)現(xiàn)移動(dòng)機(jī)器人的導(dǎo)航和控制系統(tǒng)的應(yīng)用方案 2705次閱讀
- 機(jī)器人對(duì)TF電機(jī)要求有哪些 1274次閱讀
- 面對(duì)疫情 醫(yī)療機(jī)器人能幫上什么忙? 2126次閱讀
- 教育機(jī)器人市場(chǎng)分析_教育機(jī)器人市場(chǎng)前景 5544次閱讀
- 協(xié)作機(jī)器人的起源_為什么需要協(xié)作機(jī)器人 8127次閱讀
- 仙知機(jī)器人自主研發(fā)用于移動(dòng)機(jī)器人應(yīng)用專業(yè)級(jí)客戶端軟件Roboshop 6069次閱讀
- 如何選擇機(jī)器人電機(jī)_機(jī)器人電機(jī)選擇舉例 1w次閱讀
- 軟體機(jī)器人 前所未見(jiàn)的機(jī)器人 3692次閱讀
- Python+樹(shù)莓派實(shí)現(xiàn)的微信拍攝機(jī)器人 1w次閱讀
- 如何使用HRMRP機(jī)器人平臺(tái)構(gòu)建機(jī)器人應(yīng)用系統(tǒng) 1629次閱讀
- 如何構(gòu)建不傷害人類的工業(yè)機(jī)器人 1129次閱讀
下載排行
本周
- 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)論
查看更多