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

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

3天內(nèi)不再提示

怎樣通過(guò)USB進(jìn)行Arduino Python通信

454398 ? 來(lái)源:wv ? 2019-10-24 11:52 ? 次閱讀

第1步:計(jì)算機(jī)環(huán)境

在計(jì)算機(jī)方面,我們將使用一個(gè)稱為PySerial的Python模塊。巧合的是,PySerial允許通過(guò)Python使用串行連接。在Windows上安裝PySerial是一個(gè)非常簡(jiǎn)單的過(guò)程。 注意:此“假設(shè)”假設(shè)您已安裝Python 2. *!如果您不這樣做,PySerial仍然可以使用,但是您可能需要稍微更改代碼以適應(yīng)新標(biāo)準(zhǔn)。

要在Windows上安裝,只需訪問(wèn)PySerial的下載頁(yè)面,下載Windows二進(jìn)制文件并運(yùn)行它(在撰寫本文時(shí)為pyserial-2.7.win32.exe)。然后,通過(guò)打開(kāi)新的Python解釋器實(shí)例并運(yùn)行以下命令來(lái)測(cè)試安裝:

import serial

步驟2:初始連接

要從Python啟動(dòng)與Arduino的連接,我們首先必須確定Arduino處于哪個(gè) COM端口。幸運(yùn)的是,Ardunio編程環(huán)境使此任務(wù)變得簡(jiǎn)單。

只需查看Arduino IDE的右下角,您將看到一些包含COM端口號(hào)的文本。我們將使用它來(lái)啟動(dòng)我們的Python串行連接,如下所示:

arduino = serial.Serial(‘COM1’, 115200, timeout=.1)

上面的代碼將在“ COM1”上使用“ 115200”波特創(chuàng)建一個(gè)名為“ ardunio”的新串行對(duì)象,速率和.1秒超時(shí)。保持選定的波特率非常重要,因?yàn)樗仨毰cArdiuno端的波特率完全匹配。

第3步:Ardiuno與Python的通信

在Ardunio和Python之間進(jìn)行通信比通過(guò)其他方式更容易。首先,我們需要一些代碼來(lái)啟動(dòng)Ardunio的串行連接,并傳遞一條消息。我們可以使用Arduino的Serial.write()函數(shù)來(lái)做到這一點(diǎn),就像這樣:

void setup() {

Serial.begin(115200); // use the same baud-rate as the python side

}

void loop() {

Serial.println(“Hello world from Ardunio!”); // write a string

delay(1000);

}

這段代碼將編寫一個(gè)“來(lái)自Ardunio的Hello world!”。每秒一次連接到串行連接?,F(xiàn)在,我們將構(gòu)建一個(gè)Python腳本,該腳本能夠接收這些消息,并根據(jù)需要對(duì)其進(jìn)行處理。首先,我們必須像上一頁(yè)一樣啟動(dòng)連接,然后創(chuàng)建一個(gè)循環(huán),該循環(huán)從流中獲取當(dāng)前信息,并將其打印到控制臺(tái)。

import serial

arduino = serial.Serial(‘COM1’, 115200, timeout=.1)

while True:

data = arduino.readline()[:-2] #the last bit gets rid of the new-line chars

if data:

print data

請(qǐng)注意,在這種情況下,readline()處于阻塞狀態(tài),因此它將等待直到新行完全通過(guò)串行緩沖區(qū)為止。通常,readline()會(huì)占據(jù)空白行,因此我放入了if語(yǔ)句來(lái)檢查數(shù)據(jù)是否實(shí)際包含任何內(nèi)容。如果您想更精確地獲取非阻塞數(shù)據(jù),則可以在Arduino端使用read()并使用Serial.write()(用于字節(jié))或Serial.print()(用于ASCII字符),但是您需要

第4步:Python與Arduino通訊

這一步有點(diǎn)難,因?yàn)檫@需要我們?cè)谑挛锏腁rduino方面解析數(shù)據(jù)。為了幫助加快速度,我繼續(xù)編寫了一個(gè)簡(jiǎn)單的循環(huán),該循環(huán)從Serial緩沖區(qū)中獲取當(dāng)前數(shù)據(jù),并創(chuàng)建一個(gè)以Null結(jié)尾的字符串(C字符串),然后將其傳遞回Serial連接。您可以使用此技術(shù)來(lái)編寫實(shí)際的解析器,方法是指定自己的數(shù)據(jù)包前綴和后綴,然后在串行緩沖區(qū)中掃描這些內(nèi)容,并相應(yīng)地創(chuàng)建字符串。

void setup() {

Serial.begin();

}

void loop() {

if(Serial.available() 》 0) {

char data = Serial.read();

char str[2];

str[0] = data;

str[1] = ‘’;

Serial.print(str);

}

}

現(xiàn)在我們可以編寫一個(gè)簡(jiǎn)單的腳本,將數(shù)據(jù)從Python發(fā)送到Arduino,然后打印出返回的內(nèi)容。

import serial, time

arduino = serial.Serial(‘COM1’, 115200, timeout=.1)

time.sleep(1) #give the connection a second to settle

arduino.write(“Hello from Python!”)

while True:

data = arduino.readline()

if data:

print data.rstrip(‘ ’) #strip out the new lines for now

# (better to do .read() in the long run for this reason

不難看出如何進(jìn)一步擴(kuò)展此方法以允許兩個(gè)設(shè)備之間進(jìn)行復(fù)雜的通信。我將在以后的“ ible”中介紹這種通信的一個(gè)示例,在該示例中,我將制作一種能夠在任何PC游戲上工作的游戲手柄設(shè)備!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    7876

    瀏覽量

    263712
  • python
    +關(guān)注

    關(guān)注

    55

    文章

    4767

    瀏覽量

    84375
  • Arduino
    +關(guān)注

    關(guān)注

    187

    文章

    6457

    瀏覽量

    186502
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    USB2ANY控制lmx2595evm,是否可以通過(guò)python或者FPGA直接與evm通信來(lái)控制?

    USB2ANY控制lmx2595evm,寫入寄存器值的常用方法是使用TICS Pro軟件控制,請(qǐng)問(wèn)我是否可以通過(guò)python或者FPGA直接與evm通信來(lái)控制
    發(fā)表于 11-08 16:26

    如何用python控制usb2any?

    我想用python控制usb2any,在網(wǎng)上搜索后得到的關(guān)于usb2any的資料很少,是否有官方的usb2any函數(shù)庫(kù)?
    發(fā)表于 11-08 14:36

    使用Python進(jìn)行圖像處理

    下面是一個(gè)關(guān)于使用Python在幾行代碼中分析城市輪廓線的快速教程。
    的頭像 發(fā)表于 11-07 10:14 ?95次閱讀
    使用<b class='flag-5'>Python</b><b class='flag-5'>進(jìn)行</b>圖像處理

    如何用python控制usb2any?

    我想用python控制usb2any,在網(wǎng)上搜索后得到的關(guān)于usb2any的資料很少,是否有官方的usb2any函數(shù)庫(kù)?
    發(fā)表于 09-27 06:44

    使用Python進(jìn)行Ping測(cè)試

    )請(qǐng)求包,然后等待目標(biāo)主機(jī)返回響應(yīng)包,從而測(cè)量網(wǎng)絡(luò)的延遲和丟包情況。隨著Python編程語(yǔ)言的廣泛應(yīng)用,越來(lái)越多的網(wǎng)絡(luò)工程師開(kāi)始使用Python進(jìn)行自動(dòng)化網(wǎng)絡(luò)測(cè)試和管理任務(wù)。本篇文章將詳細(xì)介紹如何使用
    的頭像 發(fā)表于 08-12 17:56 ?419次閱讀
    使用<b class='flag-5'>Python</b><b class='flag-5'>進(jìn)行</b>Ping測(cè)試

    用pycharm進(jìn)行python爬蟲的步驟

    以下是使用PyCharm進(jìn)行Python爬蟲的步驟: 安裝PyCharm和Python 首先,您需要安裝PyCharm和Python。PyCharm是一個(gè)流行的
    的頭像 發(fā)表于 07-11 10:11 ?651次閱讀

    使用Python進(jìn)行自然語(yǔ)言處理

    在探討使用Python進(jìn)行自然語(yǔ)言處理(NLP)的廣闊領(lǐng)域時(shí),我們首先需要理解NLP的基本概念、其重要性、Python在NLP中的優(yōu)勢(shì),以及如何通過(guò)
    的頭像 發(fā)表于 07-04 14:40 ?375次閱讀

    如何使用Python進(jìn)行神經(jīng)網(wǎng)絡(luò)編程

    神經(jīng)網(wǎng)絡(luò)簡(jiǎn)介 神經(jīng)網(wǎng)絡(luò)是一種受人腦啟發(fā)的機(jī)器學(xué)習(xí)模型,由大量的節(jié)點(diǎn)(或稱為“神經(jīng)元”)組成,這些節(jié)點(diǎn)在網(wǎng)絡(luò)中相互連接。每個(gè)節(jié)點(diǎn)可以接收輸入,對(duì)輸入進(jìn)行加權(quán)求和,然后通過(guò)一個(gè)激活函數(shù)產(chǎn)生輸出
    的頭像 發(fā)表于 07-02 09:58 ?336次閱讀

    求助,在esp-idf中使用arduino作為組件后怎樣使用arduino的庫(kù)?

    在esp-idf中使用arduino作為組件后怎樣使用arduino的庫(kù),例如我此時(shí)需要使用arduino的第三方庫(kù)blinker,怎樣使用
    發(fā)表于 06-12 07:21

    用STM32WB5MMG的設(shè)計(jì)的傳感模塊與USB dongle進(jìn)行通信遇到的疑問(wèn)求解

    通過(guò)用STM32WB5MMG的設(shè)計(jì)的傳感模塊與USB dongle進(jìn)行通信(藍(lán)牙通知 單次通知數(shù)據(jù)243Bytes) 1.我只有每次下載完程序才能正常與
    發(fā)表于 05-24 08:22

    通過(guò)Python腳本實(shí)現(xiàn)WIFI密碼的自動(dòng)猜解

    本文將記錄學(xué)習(xí)下如何通過(guò) Python 腳本實(shí)現(xiàn) WIFI 密碼的自動(dòng)猜解。
    的頭像 發(fā)表于 01-25 10:46 ?3242次閱讀
    <b class='flag-5'>通過(guò)</b><b class='flag-5'>Python</b>腳本實(shí)現(xiàn)WIFI密碼的自動(dòng)猜解

    如何使用Python進(jìn)行圖像識(shí)別的自動(dòng)學(xué)習(xí)自動(dòng)訓(xùn)練?

    如何使用Python進(jìn)行圖像識(shí)別的自動(dòng)學(xué)習(xí)自動(dòng)訓(xùn)練? 使用Python進(jìn)行圖像識(shí)別的自動(dòng)學(xué)習(xí)和自動(dòng)訓(xùn)練需要掌握一些重要的概念和技術(shù)。在本文中,我們將介紹如何使用
    的頭像 發(fā)表于 01-12 16:06 ?518次閱讀

    Arduino的功能及其限制

    它在某些方面的限制。 精簡(jiǎn)而易用的編程環(huán)境:Arduino IDE提供了一個(gè)友好的編程環(huán)境,使得即使沒(méi)有編程經(jīng)驗(yàn)的人也可以輕松地開(kāi)始編寫代碼。 強(qiáng)大的互聯(lián)功能:Arduino可以通過(guò)各種通信
    的頭像 發(fā)表于 12-21 14:15 ?1101次閱讀

    python shell怎么用

    Python Shell是一種交互式解釋器,可以通過(guò)命令行直接運(yùn)行Python代碼。在Shell中,可以輸入一行代碼并立即得到結(jié)果,非常適合于測(cè)試、嘗試新代碼或進(jìn)行簡(jiǎn)單的任務(wù)。本文將詳
    的頭像 發(fā)表于 11-29 14:36 ?1064次閱讀

    python怎樣運(yùn)行代碼

    Python是一種廣泛使用的編程語(yǔ)言,用于開(kāi)發(fā)各種類型的應(yīng)用程序。它具有簡(jiǎn)單易學(xué)的語(yǔ)法和強(qiáng)大的功能,可以用于編寫簡(jiǎn)單的腳本、開(kāi)發(fā)桌面應(yīng)用、構(gòu)建Web應(yīng)用、進(jìn)行科學(xué)計(jì)算等多種用途。在本文中,我們將詳細(xì)
    的頭像 發(fā)表于 11-22 10:31 ?1120次閱讀