電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>Alexa EV3糖果機(jī)開源分享

Alexa EV3糖果機(jī)開源分享

2022-11-08 | zip | 0.26 MB | 次下載 | 免費(fèi)

資料介紹

描述

我們的家人出于各種原因都喜歡糖果。我們想圍繞我們最喜歡的主題創(chuàng)新一些家庭自動(dòng)化。所以我們制造了一臺(tái)帶有傳送帶的機(jī)器,可以為我們提供糖果。讓 Amazon Echo Dot 與 Mindstorms EV3 進(jìn)行通信,很容易向 Alexa 傳授一些技巧,這對(duì)我們有益。

希望您按照以下步驟構(gòu)建我們的模型,然后用您自己的酷想法對(duì)其進(jìn)行擴(kuò)展。

演示視頻

?

“Alexa,打開糖果機(jī)”

“糖果機(jī)已啟動(dòng)。有什么可以為您服務(wù)的嗎?”

“請(qǐng)給我一顆藍(lán)色糖果和一顆綠色糖果”

甚至可以說(shuō)出以下內(nèi)容:

“Alexa,告訴糖果機(jī)我已經(jīng)完成了我的作業(yè)”

“恭喜!你應(yīng)該得到一些糖果”

---

通訊概述

1. 用戶與 Echo Dot 對(duì)話

2. Echo Dot 將音頻樣本發(fā)送到 Alexa Voice Service

3. AVS 將其轉(zhuǎn)換為文本,并將其與我們的 Alexa 技能模型匹配,然后調(diào)用我們的 lambda 來(lái)處理消息

4. 我們的 lambda 將語(yǔ)音和/或 EV3 命令發(fā)送回 Echo Dot

5. Echo Dot 說(shuō)出消息和/或通過藍(lán)牙向 EV3 發(fā)送我們的命令

6. EV3 執(zhí)行我們的命令

第 1 步:設(shè)置開發(fā)環(huán)境

請(qǐng)遵循LEGO MINDSTORMS 語(yǔ)音挑戰(zhàn):設(shè)置頁(yè)面上的指南,該頁(yè)面將引導(dǎo)您完成以下步驟:

EV3

  • 下載 + 刷寫 ev3dev 軟件到 microSD 卡
  • (這將允許您在 EV3 上運(yùn)行 python 代碼并使用高級(jí)硬件功能)
  • 將 microSD 卡插入 EV3 + 啟動(dòng)
  • 通過 USB 將 EV3 連接到 PC
  • (這將加快您的程序傳輸?shù)?EV3 和實(shí)時(shí)調(diào)試)

個(gè)人電腦

  • 安裝 Visual Studio Code + 其擴(kuò)展
  • 配置 Visual Studio Code 以連接到您的 EV3
  • 將示例代碼下載到 EV3

第 2 步:將您的 EV3 注冊(cè)為 Alexa Gadget

由于我們將使用 EV3 作為 Alexa Gadget(即 Alexa 將在 Echo Dot 的藍(lán)牙的幫助下使用 EV3),我們需要按照LEGO MINDSTORMS Voice Challenge: Mission 1頁(yè)面的步驟注冊(cè)并連接 EV3 到 Alexa,其中:

亞馬遜

  • 注冊(cè) developer.amazon.com 帳戶 + 將 EV3 添加為 Alexa Gadget

EV3

  • 在 EV3 上打開藍(lán)牙
  • (這是與 Echo Dot 通信所必需的)
  • 通過啟動(dòng)示例代碼連接到 Echo Dot,并完成配對(duì)過程

第 3 步:從 Alexa 技能向 EV3 發(fā)送消息

現(xiàn)在按照LEGO MINDSTORMS 語(yǔ)音挑戰(zhàn):任務(wù) 3頁(yè)面的步驟操作,該頁(yè)面將指導(dǎo)您將 Alexa 技能連接到您的 EV3。完成后,您可以為自己沒有任何連接問題而感到自豪。

您不需要構(gòu)建 EV3STORM,將大型電機(jī)連接到端口 B 和 C,將中型電機(jī)連接到端口 A 就足夠了。請(qǐng)記住,我們只是在此處設(shè)置和測(cè)試連接。

在這里你會(huì)做:

亞歷克斯

  • 打造全新 Alexa 技能+交互模型
  • (教 Alexa 理解什么以及如何理解)
  • 將 NodeJS lambda 代碼添加到技能中
  • (因此 Alexa 可以對(duì)您的命令做出反應(yīng)并在 EV3 上調(diào)用事件)

EV3

  • Python 代碼將處理 EV3 端的事件,并將移動(dòng)電機(jī)

第 4 步:構(gòu)建糖果機(jī)

完成上述設(shè)置步驟后,您就可以自己構(gòu)建糖果機(jī)了。您將需要零售 31313 LEGO Mindstorms 套裝以及一些額外的 LEGO Technic 元素用于我們的傳送帶。(請(qǐng)找到硬件列表中列出的額外元素。)

該裝置以模塊化方式構(gòu)建。下面的視頻顯示了模塊以及如何構(gòu)建機(jī)器。

?

請(qǐng)注意:中型電機(jī)連接到端口 A,大型電機(jī)連接到端口 B,顏色傳感器連接到端口 2。

接下來(lái)是糖果。

EV3 的顏色傳感器可以檢測(cè)黑色、藍(lán)色、綠色、黃色、紅色、白色和棕色。但是,傳送帶測(cè)量為黑色或紅色。在剩下的顏色中,我們只有藍(lán)色、綠色黃色糖果。所以我們將在這個(gè)項(xiàng)目中只使用這 3 種顏色。

第 5 步:為糖果機(jī)定制 Alexa

在這里,我們正在實(shí)施通信概述的#3。

使用與創(chuàng)建 Mindstorms 技能時(shí)相同的步驟創(chuàng)建一個(gè)名為 CandyMachine 的新技能。

打開此項(xiàng)目中的代碼示例(alexa-candymachine-code.zip在此頁(yè)面底部)并將model.json文件內(nèi)容復(fù)制粘貼到構(gòu)建/交互模型/JSON 編輯器中,然后保存模型。

這將定義 Alexa 技能的調(diào)用名稱,aCandyIndent用于請(qǐng)求糖果,aGoalIntent用于實(shí)現(xiàn)您的目標(biāo)。請(qǐng)查看我們定義的短語(yǔ)。

pYYBAGNopDOAZu9QAAFBT9IkGXY917.jpg
?
{
    "interactionModel": {
        "languageModel": {
            "invocationName": "candy machine",
            "intents": [
                {
                    "name": "AMAZON.CancelIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.HelpIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.StopIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.NavigateHomeIntent",
                    "samples": []
                },
                {
                    "name": "CandyIntent",
                    "slots": [
                        {
                            "name": "Pieces",
                            "type": "AMAZON.NUMBER"
                        },
                        {
                            "name": "Color",
                            "type": "AMAZON.Color"
                        },
                        {
                            "name": "PiecesB",
                            "type": "AMAZON.NUMBER"
                        },
                        {
                            "name": "ColorB",
                            "type": "AMAZON.Color"
                        }
                    ],
                    "samples": [
                        "Give me {Pieces} pieces of {Color} candies",
                        "Give me {Pieces} pieces of {Color} and {PiecesB} pieces of {ColorB} candies",
                        "Give me {Pieces} pieces of candies",
                        "Give me a {Color} candy",
                        "Give me a candy"
                    ]
                },
                {
                    "name": "GoalIntent",
                    "slots": [],
                    "samples": [
                        "I have finished my homework",
                        "My room is clean"
                    ]
                }
            ],
            "types": []
        }
    }
}

完成此操作后,您需要將 lambda 文件從alexa-candymachine-code.zipAlexa 代碼編輯器復(fù)制并粘貼到相應(yīng)的文件common.js、index.js. 不要忘記保存它們。這些文件基本上是 Alexa 技能背后的 lambda 代碼。邏輯的驗(yàn)證部分和 Alexa 會(huì)說(shuō)的消息在這里,以及我們要發(fā)送給 EV3 的命令也在這里。package.jsonutil.js

讓我們來(lái)看看它們:

// Skill starting event
const LaunchRequestHandler = {
    canHandle(handlerInput) {
        return Alexa.getRequestType(handlerInput.requestEnvelope) === 'LaunchRequest';
    },
    handle: async function(handlerInput) {

        const request = handlerInput.requestEnvelope;
        const { apiEndpoint, apiAccessToken } = request.context.System;
        const apiResponse = await Util.getConnectedEndpoints(apiEndpoint, apiAccessToken);
        if ((apiResponse.endpoints || []).length === 0) {
            return handlerInput.responseBuilder
            .speak(`I couldn't find an EV3 Brick connected to this Echo device. Please check to make sure your EV3 Brick is connected, and try again.`)
            .getResponse();
        }

    // Store the gadget endpointId to be used in this skill session
    const endpointId = apiResponse.endpoints[0].endpointId || [];
    Util.putSessionAttribute(handlerInput, 'endpointId', endpointId);

    return handlerInput.responseBuilder
        .speak("Candy machine activated. What can I do for you?")
        .reprompt("What can I do for you?")
        .getResponse();
    }
};

LaunchRequestHandler如果你說(shuō)"Alexa, open Candy Machine"就會(huì)被調(diào)用。這將檢查與 EV3 的連接,并在成功時(shí)回復(fù)用戶。

方法.reprompt()在這里很重要。它會(huì)讓 Alexa 在 Candy Machine 模式下等待下一個(gè)命令(保持會(huì)話打開)。

// Construct and send a custom directive to the connected gadget with
// data from the CandyIntent.
const CandyIntentHandler = {
    canHandle(handlerInput) {
        return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
            && Alexa.getIntentName(handlerInput.requestEnvelope) === 'CandyIntent';
        },
    handle: function (handlerInput) {
        const request = handlerInput.requestEnvelope;

        // Parameter is optional, use default if not available
        const pieces = Alexa.getSlotValue(request, 'Pieces') || 1;
        const color = Alexa.getSlotValue(request, 'Color') || "";
        const piecesB = Alexa.getSlotValue(request, 'PiecesB') || 0;
        const colorB = Alexa.getSlotValue(request, 'ColorB') || "";

        ////debug : return handlerInput.responseBuilder.speak(`Please wait while I am serving your ${pieces} pieces of ${color} and ${piecesB} pieces of ${colorB} candies.`).getResponse();

        // Validations - if request is not valid, we will require the user to specify his/her request in more detail.
        let validationSpeechOutput = "";
        let repromptSpeechOutput = "What can I do for you?";

        if (color === "")
            validationSpeechOutput = "I am afraid, you forgot to mention the color";

        else if (color !== "blue" && color !== "green" && color !== "yellow")
            validationSpeechOutput = "Sorry, I don't have this color";

        else if (colorB !== "" && colorB !== "blue" && colorB !== "green" && colorB !== "yellow")
            validationSpeechOutput = "Sorry, I don't have this color";

        else if (pieces > 5 || piecesB > 5)
            validationSpeechOutput = "I am afraid, this is too much for you";

        // (reprompt will keep session open)
        if (validationSpeechOutput !== "")
            return handlerInput.responseBuilder
                .speak(validationSpeechOutput + repromptSpeechOutput)
                .reprompt(repromptSpeechOutput)
                .getResponse();

        // Validations done

        // Get data from session attribute
        const attributesManager = handlerInput.attributesManager;
        const endpointId = attributesManager.getSessionAttributes().endpointId || [];

        // Construct the directive with the payload containing the move parameters
        let directive = Util.build(endpointId, NAMESPACE, NAME_CONTROL,
            {
                type: 'candy',
                pieces: pieces,
                color: color,
                piecesB: piecesB,
                colorB: colorB
            });

        const speechOutput = (piecesB === 0)
            ? `Please wait while I am serving your ${pieces} ${color} candies.`
            : `Please wait while I am serving your ${pieces} ${color} and ${piecesB} ${colorB} candies.`;

        return handlerInput.responseBuilder
            .speak(speechOutput)
            .addDirective(directive)
            .getResponse();
    }
};

CandyIntentHandler將處理用戶要求糖果的命令。首先我們用 獲取參數(shù)Alexa.getSlotValue()。請(qǐng)注意,如果缺少值,我們會(huì)設(shè)置默認(rèn)值,因?yàn)橛脩粽f(shuō)一些不完整的東西,例如Color缺少。

////debug當(dāng)我們測(cè)試參數(shù)或意圖樣本是否良好時(shí),這是我們的一大幫助。只需取消注釋,Alexa 就會(huì)告訴你她得到的參數(shù)。(您甚至可以使用 Alexa 開發(fā)人員控制臺(tái)的“測(cè)試”選項(xiàng)卡執(zhí)行測(cè)試而無(wú)需部署。)

接下來(lái)是驗(yàn)證。對(duì)于幾個(gè)不完整或未處理的輸入,我們會(huì)回復(fù)一條消息,并使用 保持會(huì)話打開.reprompt()。這些情況是用戶錯(cuò)過了顏色,或者要求我們沒有顏色,或者要求太多糖果。

一旦驗(yàn)證成功,我們將參數(shù)傳遞給 EV3 的糖果處理程序Util.build()

最后,我們還會(huì)讓用戶知道我們正在提供糖果。

// Construct and send a custom directive to the connected gadget with
// data from the GoalIntent.
const GoalIntentHandler = {
    canHandle(handlerInput) {
        return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
            && Alexa.getIntentName(handlerInput.requestEnvelope) === 'GoalIntent';
    },
    handle: function (handlerInput) {
        const request = handlerInput.requestEnvelope;

    return handlerInput.responseBuilder
        .speak("Congratulations! You deserve some candies.")
        .reprompt("You deserve some candies.")
        .getResponse();
    }
};

作為獎(jiǎng)勵(lì),我們通過他/她是否達(dá)到模型GoalIntentHandler中先前列出的目標(biāo)之一來(lái)激勵(lì)用戶。GoalIntent

在這里,我們只是回復(fù)祝賀并保持會(huì)話開放。這足以讓用戶和 Alexa 之間繼續(xù)進(jìn)行討論。

---

在代碼編輯器中保存lambda 的所有文件后,您還需要單擊Deploy ,因此該解決方案將在云中處于活動(dòng)狀態(tài)。

第 6 步:為糖果機(jī)定制 EV3

現(xiàn)在 Alexa 已準(zhǔn)備好將我們的參數(shù)傳遞給 EV3 Python 代碼的糖果處理程序,讓我們實(shí)現(xiàn)它。這是我們的通信概述中的#6。

首先,您需要編輯candymachine.ini,并將您的 Alexa Gadget ID 和 Secret(您在第 2 步中注冊(cè)的)粘貼到此文件中。因此 Alexa 將能夠通過 Echo Dot 和藍(lán)牙連接到您的 EV3。

[GadgetSettings]
amazonId = xxxxxxxxxxxxxx
alexaGadgetSecret = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

接下來(lái)是candmayhine.py用 Python 編寫的 EV3 代碼:

一開始,我們定義了如何連接外圍設(shè)備。

from agt import AlexaGadget

from ev3dev2.led import Leds
from ev3dev2.sound import Sound
from ev3dev2.motor import OUTPUT_A, MediumMotor
from ev3dev2.motor import OUTPUT_B, LargeMotor
from ev3dev2.sensor.lego import ColorSensor

同樣在初始化中:

def __init__(self):
    """
    Performs Alexa Gadget initialization routines and ev3dev resource allocation.
    """
    super().__init__()

    # Connect motors and color sensor
    self.colorsensor = ColorSensor()
    self.beltmotor = LargeMotor(OUTPUT_B)
    self.ejectmotor = MediumMotor(OUTPUT_A)
    self.sound = Sound()
    self.leds = Leds()

然后當(dāng)命令到達(dá) Mindstorms Gadget 時(shí),我們將參數(shù)拆箱并調(diào)用我們自己的方法:

def on_custom_mindstorms_gadget_control(self, directive):
    """
    Handles the Custom.Mindstorms.Gadget control directive.
    :param directive: the custom directive with the matching namespace and name
    """
    try:
        payload = json.loads(directive.payload.decode("utf-8"))
        print("Control payload: {}".format(payload), file=sys.stderr)
        control_type = payload["type"]
        if control_type == "candy":

            # Expected params: [pieces, color, piecesB, colorB]
            self._candy(int(payload["pieces"]), payload["color"], int(payload["piecesB"]), payload["colorB"])

    except KeyError:
        print("Missing expected parameters: {}".format(directive), file=sys.stderr)

這是供應(yīng)糖果的主要部分:

def _candy(self, pieces: int, color, piecesB: int, colorB, is_blocking=False):
    """
    Handles candy commands from the directive.
    Sample:
    Give me {Pieces} {Color} and {PiecesB} {ColorB} candies
    Variations:
    1 blue and 2 green
    1 blue and 0 
    """
    print("Candy command: ({}, {}, {}, {})".format(pieces, color, piecesB, colorB), file=sys.stderr)

    # Let EV3 do his job

    # Music at the beginning
    self.leds.set_color("LEFT", "RED")
    self.leds.set_color("RIGHT", "RED")
    self.sound.play_song((('C4', 'e'), ('D4', 'e'), ('E5', 'q')))

    self.colorsensor.mode='COL-COLOR'
    colors=('unknown','black','blue','green','yellow','red','white','brown')

    print("Processing 1st color", file=sys.stderr)
    for x in range(pieces):

        print("Belt started: candy: {}".format(x), file=sys.stderr)
        self.beltmotor.run_forever(speed_sp=-100)
        while True:
            actualcolor = colors[self.colorsensor.value()]
            print("Actual color: {}, {}".format(actualcolor, color), file=sys.stderr)
            if actualcolor == color:
                break
        self.beltmotor.stop(stop_action="hold")
        self.beltmotor.wait_while('running')
        print("Belt stopped", file=sys.stderr)

        print("Move candy to eject position", file=sys.stderr)
        self.beltmotor.run_to_rel_pos(position_sp=-135, speed_sp=-100, stop_action="hold")
        self.beltmotor.wait_while('running')

        print("Eject candy", file=sys.stderr)
        self.ejectmotor.run_to_rel_pos(position_sp=-360, speed_sp=400, stop_action="hold")
        self.ejectmotor.wait_while('running')

    print("Processing 2nd color", file=sys.stderr)
    for x in range(piecesB):

        print("Belt started: candy: {}".format(x), file=sys.stderr)
        self.beltmotor.run_forever(speed_sp=-100)
        while True:
            actualcolor = colors[self.colorsensor.value()]
            print("Actual color: {}, {}".format(actualcolor, colorB), file=sys.stderr)
            if actualcolor == colorB:
                break
        self.beltmotor.stop(stop_action="hold")
        self.beltmotor.wait_while('running')
        print("Belt stopped", file=sys.stderr)

        print("Move candy to eject position", file=sys.stderr)
        self.beltmotor.run_to_rel_pos(position_sp=-135, speed_sp=-100, stop_action="hold")
        self.beltmotor.wait_while('running')

        print("Eject candy", file=sys.stderr)
        self.ejectmotor.run_to_rel_pos(position_sp=-360, speed_sp=400, stop_action="hold")
        self.ejectmotor.wait_while('running')

    # Music at the end
    self.leds.set_color("LEFT", "GREEN")
    self.leds.set_color("RIGHT", "GREEN")
    self.sound.play_song((('C4', 'e'), ('D4', 'e'), ('E5', 'q')))

所以對(duì)于 Python 代碼,首先我們使用 EV3 自己的編程語(yǔ)言來(lái)實(shí)現(xiàn)和測(cè)試,像這樣:

poYBAGNopDeAUUQ-AACtMib9N30028.jpg
?

Python代碼就是以此為基礎(chǔ)的,所以在一些啟動(dòng)聲音之后,我們用大電機(jī)轉(zhuǎn)動(dòng)皮帶,同時(shí)不斷檢查顏色傳感器的值。如果傳感器看到我們選擇的糖果顏色,那么我們立即停止傳送帶,然后將其移動(dòng)到所需的彈出位置,然后中型電機(jī)將彈出我們的糖果。如此重復(fù)直到所有第一種顏色的糖果都被彈出。然后再次重復(fù)第二種顏色。

當(dāng)我們將程序翻譯成 Python 時(shí),這個(gè)站點(diǎn)非常有用:https ://sites.google.com/site/ev3python/learn_ev3_python/using-motors

第7步:有趣!

現(xiàn)在讓我們將糖果放入機(jī)器中,讓樂趣開始吧。

您可以通過使用 Visual Studio Code 將程序下載到 EV3 來(lái)啟動(dòng)該程序,然后右鍵單擊您的candymachine.py文件并運(yùn)行它。然后 Visual Studio Code 將以調(diào)試模式啟動(dòng)它,您還將在 PC 上看到 EV3 的控制臺(tái)輸出:

pYYBAGNopDqABViRAAGMqjqwwQI016.jpg
?

該過程會(huì)不斷地向控制臺(tái)注銷正在發(fā)生的事情,因此您可以在從 Visual Studio Code 運(yùn)行時(shí)檢查它,如下所示:

Starting: brickrun --directory="/home/robot/alexa-candymachine" "/home/robot/alexa-candymachine/candymachine.py"
Started.
----------
Attempting to reconnect to Echo device with address: 08:A6:BC:95:53:02
Connected to Echo device with address: 08:A6:BC:95:53:02
GadgetDFD connected to Echo device
Control payload: {'pieces': '2', 'color': 'blue', 'piecesB': '1', 'type': 'candy', 'colorB': 'green'}
Candy command: (2, blue, 1, green)
Processing 1st color
Belt started: candy: 0
Actual color: black, blue
Actual color: black, blue
Actual color: black, blue
...
Actual color: red, blue
Actual color: red, blue
Actual color: red, blue
...
Actual color: black, blue
Actual color: black, blue
Actual color: black, blue
Actual color: blue, blue
Belt stopped
Move candy to eject position
Eject candy
Belt started: candy: 1
Actual color: red, blue
Actual color: red, blue
...
Actual color: black, blue
Actual color: black, blue
Actual color: black, blue
...
Actual color: red, blue
Actual color: red, blue
Actual color: red, blue
...
Actual color: black, blue
Actual color: black, blue
Actual color: black, blue
Actual color: blue, blue
Belt stopped
Move candy to eject position
Eject candy
Processing 2nd color
Belt started: candy: 0
Actual color: red, green
Actual color: red, green
...
Actual color: black, green
Actual color: black, green
Actual color: black, green
...
Actual color: red, green
Actual color: red, green
...
Actual color: black, green
Actual color: black, green
Actual color: black, green
Actual color: green, green
Belt stopped
Move candy to eject position
Eject candy

?

現(xiàn)在,讓我們與 Alexa 聊天:

“Alexa,打開糖果機(jī)”

“糖果機(jī)已啟動(dòng)。有什么可以為您服務(wù)的嗎?”

“給我 2 塊綠色和 3 塊黃色糖果”

“請(qǐng)稍等,我正在為您提供 2 個(gè)綠色和 3 個(gè)黃色的糖果?!?/font>

或者根據(jù) Alexa 技能交互模型:

“Alexa,讓糖果機(jī)給我一顆糖果”

“給我兩顆藍(lán)色糖果”

“給我一顆綠糖”

“給我3塊糖果”

“給我6塊紅糖”

每當(dāng)您的請(qǐng)求不完整或您請(qǐng)求的內(nèi)容不可用時(shí),Alexa 將根據(jù) lambda 中實(shí)現(xiàn)的邏輯做出相應(yīng)的響應(yīng)。

你也可以告訴她你已經(jīng)達(dá)到了你的目標(biāo),這樣她就可以給你一顆糖果。

“我已經(jīng)完成了我的家庭作業(yè)”

“恭喜!你應(yīng)該得到一些糖果”

“我的房間很干凈”

“恭喜!你應(yīng)該得到一些糖果”

?

您可以在下面的視頻中看到與她的一些高級(jí)對(duì)話:

?

我們希望您喜歡構(gòu)建我們的糖果機(jī)項(xiàng)目!

(于 2019 年 11 月 17 日提交)


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

評(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開發(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開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  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ì)》 溫德爾著
  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)