www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 工業(yè)控制 > 電路設(shè)計(jì)項(xiàng)目集錦
[導(dǎo)讀]其他電腦(比如安卓手機(jī)/平板電腦)的屏幕壞了,你可能想在安排維修之前緊急訪問(wèn)一些東西。你可以使用android的USB OTG功能(是的,幾乎每個(gè)android都支持這個(gè)功能,你可以將鼠標(biāo)和鍵盤連接到它)。

它到底是什么?

一種通過(guò)USB連接將鼠標(biāo)和鍵盤動(dòng)作從您自己的計(jì)算機(jī)傳輸?shù)搅硪慌_(tái)計(jì)算機(jī)的方法,使用樹莓派pico和USB到TTL UART轉(zhuǎn)換器。

為什么叫跳鼠?

跳鼠是一種跳躍的沙漠嚙齒動(dòng)物,這個(gè)項(xiàng)目允許你讓你的鼠標(biāo)和鍵盤在不同的電腦之間跳躍,就像跳鼠一樣。因此得名跳鼠。

在哪里使用它?

這樣的功能可以在以下用例場(chǎng)景中有所幫助:

同時(shí)在兩臺(tái)電腦上工作,在不同的鍵盤和鼠標(biāo)之間切換變得笨拙。像跳鼠這樣的設(shè)備可以讓你在這些設(shè)備之間切換鼠標(biāo)/鍵盤,這真的很舒服。

其他電腦(可能是筆記本電腦)的鼠標(biāo)/鍵盤壞了,你不想買一套新的鼠標(biāo)和鍵盤,直到它被修復(fù)。

其他電腦(比如安卓手機(jī)/平板電腦)的屏幕壞了,你可能想在安排維修之前緊急訪問(wèn)一些東西。你可以使用android的USB OTG功能(是的,幾乎每個(gè)android都支持這個(gè)功能,你可以將鼠標(biāo)和鍵盤連接到它)。

當(dāng)設(shè)置sbc(單板計(jì)算機(jī))時(shí),它只有1x USB端口,并且像樹莓派Zero 2w這樣的微型USB,它需要一個(gè)USB集線器(可能是一個(gè)電源集線器)來(lái)連接鼠標(biāo)和鍵盤。跳鼠可以很容易地幫助這樣的情況下,只有一個(gè)USB 2.0到微型USB OTG電纜。

當(dāng)然,上面提到的所有用例都要求您擁有Raspberry Pi Pico(或任何其他CircuitPython支持的開發(fā)板)和USB到TTL轉(zhuǎn)換器。但我們中的許多人兩者都已經(jīng)具備了。

必需的部分

一個(gè)支持CircuitPython的開發(fā)板,支持USB HID。我已經(jīng)使用Rpi Pico與rp2040,但任何其他板將工作。你可以在CircuitPython網(wǎng)站上找到支持的電路板(鏈接在最后)。

任何一個(gè)TTL UART到USB轉(zhuǎn)換器。我已經(jīng)使用了CP2102,但其他轉(zhuǎn)換器,如PL2303, FT232, CH340將工作得很好,因?yàn)樗鼈兌贾С?15200波特率。請(qǐng)確保該轉(zhuǎn)換器的邏輯電平與電路板的邏輯電平(即3.3V邏輯電平)匹配。

一臺(tái)運(yùn)行Windows/Linux并安裝了python的PC機(jī)。同樣,應(yīng)該安裝numpy, pyserial和pygame。

以下是我使用的設(shè)置摘要,但更高的版本應(yīng)該可以正常工作:

它是如何工作的?

下面是對(duì)系統(tǒng)架構(gòu)的簡(jiǎn)要描述。別擔(dān)心,后面會(huì)詳細(xì)解釋每一步。

pygame窗口在本地計(jì)算機(jī)上運(yùn)行,并捕獲所有鼠標(biāo)和鍵盤操作活動(dòng)。

這些動(dòng)作從pygame值映射到circuitpython值。

每個(gè)動(dòng)作生成一個(gè)二進(jìn)制數(shù)據(jù)包,并使用pyserial發(fā)送到TTL UART到USB轉(zhuǎn)換器。

樹莓派Pico接收這些二進(jìn)制數(shù)據(jù)包,解碼它們,并在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行相同的HID鼠標(biāo)和鍵盤活動(dòng)。

下面將進(jìn)一步解釋源代碼細(xì)節(jié),因此您可以同時(shí)參考github repo。

步驟1:使用pygame捕獲本地計(jì)算機(jī)上的鼠標(biāo)和鍵盤輸入

在捕獲鼠標(biāo)和鍵盤輸入時(shí),需要注意以下幾點(diǎn):

a)當(dāng)捕獲活動(dòng)時(shí),鼠標(biāo)和鍵盤的動(dòng)作應(yīng)該只對(duì)遠(yuǎn)程計(jì)算機(jī)有效,不應(yīng)該與本地計(jì)算機(jī)交互。這意味著鼠標(biāo)和鍵盤不應(yīng)該允許在本地計(jì)算機(jī)上的任何操作,當(dāng)捕獲是活動(dòng)的。為此,pygame允許使用以下函數(shù)完全獲取輸入:

b)鼠標(biāo)應(yīng)該允許無(wú)限運(yùn)動(dòng)并正確報(bào)告相對(duì)運(yùn)動(dòng)。這意味著當(dāng)鼠標(biāo)指針到達(dá)本地計(jì)算機(jī)上的某個(gè)邊緣時(shí)不應(yīng)該停止移動(dòng),因?yàn)橥瑫r(shí)鼠標(biāo)指針可能還沒(méi)有到達(dá)遠(yuǎn)程計(jì)算機(jī)上的同一邊緣。Pygame允許使用以下功能,通過(guò)使鼠標(biāo)指針不可見并允許在虛擬輸入模式下無(wú)限移動(dòng)鼠標(biāo)。

c)應(yīng)該有簡(jiǎn)單的方法在本地和遠(yuǎn)程計(jì)算機(jī)之間切換。為此,Ctrl+Alt+G (G表示抓取)被用作啟用/禁用抓取的快捷鍵。啟動(dòng)跳躍跳鼠時(shí),最初禁用Grab,并且鼠標(biāo)/鍵盤在本地計(jì)算機(jī)上正常工作。通過(guò)選擇pygame窗口并按Ctrl+Alt+G將啟用抓取,鼠標(biāo)/鍵盤將僅在遠(yuǎn)程計(jì)算機(jī)上工作。再次按Ctrl+Alt+G將禁用抓取,鼠標(biāo)/鍵盤將回到本地計(jì)算機(jī)使用。請(qǐng)參考源代碼以正確理解這一點(diǎn)。

跳鼠python腳本以100 Hz采樣pygame事件,并查找MOUSEMOTION, MOUSEBUTTONDOWN, MOUSEBUTTONUP, MOUSEWHEEL, KEYDOWN, KEYUP事件。當(dāng)觀察到這些事件時(shí),它們將被進(jìn)一步發(fā)送,以便從pygame事件映射(如果需要)到circuitpython hid命令。

此外,還存在一些限制。pygame允許捕獲Windows上幾乎所有的鍵組合,除了Ctrl+Alt+Del。但是在Linux上,不允許捕獲更多的鍵組合。然而,這并不意味著這個(gè)項(xiàng)目毫無(wú)用處。

步驟2:鍵盤鍵和鼠標(biāo)按鈕映射器

Pygame和circuitpython使用不同的整數(shù)值引用相同的鍵盤鍵或鼠標(biāo)按鈕。例如,pygame使用值0x97引用鍵盤鍵‘A’,而circuitpython使用值0x04引用相同的鍵盤鍵。因此,必須有一個(gè)查找表和查找函數(shù)來(lái)幫助進(jìn)行鍵和按鈕映射。

下面的映射表和功能已實(shí)現(xiàn)的鍵盤鍵:

同樣,鼠標(biāo)按鈕的映射表:

注意,鼠標(biāo)移動(dòng)或滾輪不需要這樣的映射,因?yàn)樗鼈儍H僅是基于移動(dòng)/滾動(dòng)的大小和方向的帶符號(hào)整數(shù)值。

步驟3:簡(jiǎn)化二進(jìn)制通信協(xié)議

由于我們需要發(fā)送關(guān)于鼠標(biāo)和鍵盤動(dòng)作的非常基本的信息,因此使用以下簡(jiǎn)化的二進(jìn)制通信協(xié)議將不同的動(dòng)作從本地計(jì)算機(jī)發(fā)送到Rpi pico。

二進(jìn)制數(shù)據(jù)包的固定長(zhǎng)度為6字節(jié)。因此不需要為數(shù)據(jù)包的大小發(fā)送額外的字節(jié)。

校驗(yàn)和就是報(bào)頭字節(jié)和有效載荷字節(jié)的總和。它可能會(huì)溢出,但沒(méi)關(guān)系,因?yàn)橥瑯拥臒o(wú)符號(hào)整數(shù)算法在接收端也會(huì)以同樣的方式工作。無(wú)論如何,這不是一個(gè)高完整性的系統(tǒng)。

下面是對(duì)所有不同動(dòng)作的二進(jìn)制數(shù)據(jù)包內(nèi)容的詳細(xì)描述。

盡管長(zhǎng)度較短,但該數(shù)據(jù)包的開銷非常高,為50%(6字節(jié)總長(zhǎng)度中的3字節(jié)報(bào)頭+校驗(yàn)和)。但只要能達(dá)到目的,那就沒(méi)問(wèn)題。

下面是將鼠標(biāo)X和Y運(yùn)動(dòng)編碼為二進(jìn)制數(shù)據(jù)包的函數(shù)。

115200的波特率夠嗎?

波特率為115200(比特/秒)和8N1(1個(gè)起始位+ 8個(gè)數(shù)據(jù)位+無(wú)奇偶校驗(yàn)(0位)+ 1個(gè)停止位=每個(gè)字節(jié)傳輸10位)

我們每秒可以傳輸11520字節(jié)((115200比特/秒)/(10比特/字節(jié))= 11520字節(jié)/秒)。

這大約是每秒1920個(gè)數(shù)據(jù)包((11520字節(jié)/秒)/(6字節(jié)/數(shù)據(jù)包)= 1920個(gè)數(shù)據(jù)包/秒)

在100Hz事件采樣時(shí)(在pygame中),這將導(dǎo)致19.2個(gè)數(shù)據(jù)包樣本的帶寬。((1920包/秒)/(100樣本/秒)= 19.2包/樣本)

19.2數(shù)據(jù)包/樣本或19.2鼠標(biāo)和鍵盤事件/樣本是相當(dāng)高的輸入速率,我們的手不能輕易地提供這樣的運(yùn)動(dòng)到鼠標(biāo)和鍵盤。

因此,115200的波特率綽綽有余,并且可以為我們的TTL級(jí)UART信號(hào)提供更長(zhǎng)的電纜長(zhǎng)度。

步驟4:二進(jìn)制數(shù)據(jù)包解碼(pico)

通過(guò)向數(shù)組中添加字節(jié)來(lái)編碼二進(jìn)制數(shù)據(jù)包更容易,但與編碼相比,解碼有點(diǎn)困難。下面是運(yùn)行在Rpi pico上的狀態(tài)機(jī)對(duì)步驟3中描述的二進(jìn)制協(xié)議的解碼邏輯。此狀態(tài)機(jī)已使用if..elseif..實(shí)現(xiàn)。Else控制語(yǔ)句與一對(duì)狀態(tài)變量。

下面是對(duì)這個(gè)狀態(tài)機(jī)及其狀態(tài)的簡(jiǎn)單描述:

步驟5:發(fā)送USB HID命令到遠(yuǎn)程計(jì)算機(jī)

一旦接收到有效的數(shù)據(jù)包并按照步驟4中的描述進(jìn)行緩沖,下面的代碼將讀取字節(jié)#2 (AXID),并根據(jù)AXID表示的操作調(diào)用所需的函數(shù)。

以下是通過(guò)讀取字節(jié)3和4 (ACV1和ACV2)的所需值來(lái)發(fā)送鼠標(biāo)運(yùn)動(dòng)的usb hid命令的代碼。

Rpi Pico UART收到考慮

circuitpython busio api消除了實(shí)現(xiàn)異步接收UART數(shù)據(jù)的底層代碼所需的所有艱苦工作。但是它要求應(yīng)用程序代碼正確地配置UART,以便應(yīng)用程序在需要時(shí)及時(shí)接收到數(shù)據(jù),并且阻塞最小,盡管數(shù)據(jù)可以隨時(shí)到達(dá)。

基本上,為了更好地調(diào)度pico上的circuitpython應(yīng)用程序,我們需要正確定義兩件事:

一次需要等待和接收多少字節(jié)- pygame以6字節(jié)長(zhǎng)度的塊(數(shù)據(jù)包)發(fā)送數(shù)據(jù),因此一次可以讀取6字節(jié),如下面的代碼片段所示。

如果在UART上沒(méi)有接收到數(shù)據(jù),需要等待多長(zhǎng)時(shí)間,也就是超時(shí)- pygame可以以100Hz的最大速度發(fā)送數(shù)據(jù),因此我們可以將超時(shí)設(shè)置為10毫秒(0.01秒),參見下面的代碼片段。

設(shè)置這些參數(shù)的原因是,busio.UART.read()函數(shù)將阻塞整個(gè)應(yīng)用程序,直到接收到所需的字節(jié)數(shù),或者在沒(méi)有接收到任何額外字節(jié)的情況下發(fā)生超時(shí)。

雖然我們的應(yīng)用程序只做一件事,即解碼和對(duì)動(dòng)作進(jìn)行操作,但在其他應(yīng)用程序中,您可能需要使用相同的code.py完成多個(gè)事情。在這種情況下,選擇超時(shí)和要讀取的字節(jié)數(shù)可以顯著地幫助減少阻塞。

您可以通過(guò)將timeout設(shè)置為0來(lái)避免阻塞。但這將導(dǎo)致對(duì)read()的更多調(diào)用,從而增加開銷,而不做任何實(shí)際工作。你可以使用circuitpython的asyncio來(lái)實(shí)現(xiàn)更好的調(diào)度。

異常處理(在本地計(jì)算機(jī)上)

Python支持異常,這是一件好事,但這意味著您必須正確處理異常,否則您的代碼將在遇到異常時(shí)立即停止執(zhí)行。使用異常處理程序,我們可以在不使代碼崩潰的情況下處理一些異常。

例如,在初始化本地計(jì)算機(jī)腳本時(shí),如果找不到ascii美術(shù)文件,我們可能會(huì)遇到異常。這可以通過(guò)簡(jiǎn)單地打印找不到ascii美術(shù)文件來(lái)處理,但執(zhí)行仍然可以繼續(xù),因?yàn)闆](méi)有任何功能依賴于ascii美術(shù)文件。

其他例外是不存在的開放串行端口,可能是因?yàn)閁SB到TTL UART模塊未連接或連接到不同的COM端口。在這種情況下,我們可以簡(jiǎn)單地打印問(wèn)題并退出應(yīng)用程序,因?yàn)闆](méi)有有效的串行適配器就無(wú)法進(jìn)一步執(zhí)行任何操作。

類似地,如果在使用之間移除USB到TTL UART適配器,則在將數(shù)據(jù)包寫入串行端口時(shí)將引發(fā)異常。這可以通過(guò)打印問(wèn)題并退出來(lái)處理,因?yàn)椴荒茉僮鋈魏问虑椤?

這些都是預(yù)期的異常,但可能會(huì)發(fā)生許多其他異常,我們可以編寫一個(gè)包含整個(gè)main()調(diào)用的公共處理程序,打印異常并退出。

注意,這些都是過(guò)于簡(jiǎn)化的異常處理程序,因?yàn)槲覀兊膽?yīng)用程序也非常簡(jiǎn)單。但是在更復(fù)雜的應(yīng)用程序中,您可能會(huì)打開多個(gè)資源,在這種情況下,必須正確釋放所有資源以避免任何損壞。

異常處理(在raspberry pi pico上)

我們應(yīng)該以避免任何異常的方式編寫嵌入式應(yīng)用程序。這可以通過(guò)范圍檢查、索引檢查、使用前變量初始化等措施來(lái)實(shí)現(xiàn)。然而,仍然有可能發(fā)生異常。

在這種情況下,我們可以編寫包含整個(gè)while True的異常處理程序,并從頭開始重新啟動(dòng)腳本執(zhí)行。因此,用戶甚至不會(huì)注意到異常,pico將很快恢復(fù)運(yùn)行。這種方法對(duì)我們來(lái)說(shuō)很有效,因?yàn)槲覀兊膽?yīng)用程序不是安全關(guān)鍵的,因此重新啟動(dòng)不會(huì)導(dǎo)致任何問(wèn)題。但對(duì)于安全關(guān)鍵型、高完整性或硬實(shí)時(shí)系統(tǒng),這種方法可能有所不同。

安裝和設(shè)置

請(qǐng)參考自述文件。Md文件從github的repo。

照片

限制

注意,并不是所有的鍵盤和鼠標(biāo)操作都可以被捕獲。當(dāng)本地計(jì)算機(jī)是windows時(shí),不會(huì)捕獲Ctrl+Alt+Del。類似的限制也適用于Linux本地計(jì)算機(jī)。

關(guān)于鍵盤記錄的注意事項(xiàng)!

在游戲的核心,跳鼠基本上就是一個(gè)鍵盤記錄器。但與鍵盤記錄器惡意軟件不同,跳鼠python腳本在以下方面有所不同:

腳本由用戶運(yùn)行,不會(huì)自動(dòng)啟動(dòng)。用戶控制是否運(yùn)行腳本。

腳本在執(zhí)行時(shí)總是顯示一個(gè)GUI pygame窗口。只有當(dāng)pygame窗口處于焦點(diǎn)時(shí),鍵盤記錄操作才會(huì)激活。

它是開源的,發(fā)行版也是源代碼(python腳本),而不是二進(jìn)制發(fā)行版。歡迎并建議您參考源代碼。

這些腳本不連接到互聯(lián)網(wǎng),記錄(捕獲)的任何密鑰都不會(huì)存儲(chǔ)在任何地方。相反,關(guān)鍵日志只是即時(shí)流式傳輸,沒(méi)有來(lái)自接收器硬件的任何反饋/請(qǐng)求(這里是rpi pico)。

該腳本不需要安裝,不會(huì)自動(dòng)啟動(dòng),不會(huì)自我復(fù)制,也不會(huì)試圖感染任何其他系統(tǒng)。刪除腳本等同于卸載。

用戶仍然需要手動(dòng)安裝依賴項(xiàng)(python, pygame, pyserial等)才能使用此腳本。該腳本永遠(yuǎn)不會(huì)安裝任何依賴項(xiàng)。

這只是一個(gè)概念證明,可以幫助同時(shí)使用兩臺(tái)計(jì)算機(jī)系統(tǒng)更容易一些。

進(jìn)一步的可能性

為本地計(jì)算機(jī)腳本添加接收功能,rpi pico應(yīng)根據(jù)其有效性確認(rèn)/不確認(rèn)串行數(shù)據(jù)包。未得到確認(rèn)/未得到確認(rèn)可以被認(rèn)為是通信有問(wèn)題。這樣我們也可以確定rpi pico連接是否正確,因?yàn)樘€有時(shí)會(huì)變松。

將此代碼移植到基于nRF52840的開發(fā)板上,以利用BLE HID功能進(jìn)行無(wú)線鼠標(biāo)和鍵盤傳輸??紤]到circuitpython對(duì)BLE HID也有很好的支持,就像本項(xiàng)目中使用的USB HID一樣,這應(yīng)該不是一項(xiàng)艱巨的工作。

本文編譯自hackster.io

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉