這是一款基于ESP32的對(duì)講機(jī)。它使用UDP廣播或ESP-NOW傳輸音頻。

硬件部件
Adafruit I2S 3W D類放大器突破-MAX98357A × 1個(gè)
I2S MEMS麥克風(fēng)突破無(wú)聊× 1個(gè)
通用4ohm或8ohm揚(yáng)聲器 × 1個(gè)
通用ESP32開(kāi)發(fā)板× 1個(gè)
按鈕開(kāi)關(guān)(可選)× 1個(gè)
描述
我們使用ESP32制作了一個(gè)Walkie-Talkie。音頻數(shù)據(jù)通過(guò)UDP廣播或ESP-NOW傳輸。因此,對(duì)講機(jī)甚至可以在沒(méi)有WiFi網(wǎng)絡(luò)的情況下工作!我以I2S麥克風(fēng)和I2S放大器為基礎(chǔ)-只需稍作改動(dòng),它就可以與模擬麥克風(fēng)和頭戴式耳機(jī)同樣工作。
細(xì)節(jié)
下方錄像帶,概述了該項(xiàng)目詳情。
您可以在以下位置訪問(wèn)Fusion360項(xiàng)目:https ://a360.co/2PXgAUS-因此,如果需要,可以隨時(shí)打印自己的版本。
對(duì)于視頻中的麥克風(fēng),我使用的是我自己的ICS-43434麥克風(fēng)板,但它可以與INMP441麥克風(fēng)板同樣良好地工作。
這兩個(gè)都是直接與ESP32交互的I2S麥克風(fēng)。
I2S 3W放大器板來(lái)自Adafruit,并為揚(yáng)聲器供電。這也直接與ESP32交互。對(duì)于ESP32開(kāi)發(fā)板,我使用的是TinyPICO,但是可以使用任何通用開(kāi)發(fā)板,因?yàn)槲覀冊(cè)诖隧?xiàng)目中未使用任何特殊功能。
我使用的是定制PCB-(由PCBWay的優(yōu)秀人才制作),與往常一樣,他們做得很好,而且我對(duì)這些板的外觀感到非常滿意。我有很多音頻項(xiàng)目,能夠?qū)⑺袞|西連接在一起而不用擔(dān)心電線到處都是很好,這真是太好了。我所做的僅有的一點(diǎn)遺漏是不會(huì)斷開(kāi)其余的GPIO引腳-因此,我認(rèn)為我將盡快開(kāi)發(fā)該板的版本2。

這是指向EasyEDA上的原理圖和PCB 的鏈接,如果需要,可以直接從PCBWay訂購(gòu)該板的鏈接。
話雖如此,您實(shí)際上不需要PCB,您可以輕松地將所有東西連接到面包板上,而這正是我制作原型時(shí)所做的。

原理圖非常簡(jiǎn)單-麥克風(fēng)和揚(yáng)聲器都使用I2S板,這使它們與ESP32的接線非常簡(jiǎn)單。
當(dāng)然,您可以修改代碼以將內(nèi)置ADC用于輸入,將內(nèi)置DAC用于輸出。如果要使用模擬麥克風(fēng)板和耳機(jī)插孔進(jìn)行輸出,則非常方便。
我在板上添加了一些額外的電路,以為麥克風(fēng)創(chuàng)建干凈的電源。如果您觀看了我以前的一些視頻,那么您會(huì)想起來(lái),使用WiFi時(shí),我們?cè)邴溈孙L(fēng)上會(huì)聽(tīng)到很多噪音。
為解決此噪聲問(wèn)題,我們通過(guò)從電池直接饋電為麥克風(fēng)創(chuàng)建干凈的3.3v電源,我們使用LC濾波器對(duì)其進(jìn)行濾波,然后將其傳遞至低壓降穩(wěn)壓器。這為我們提供了一個(gè)非常好的,干凈的麥克風(fēng)電源,從而消除了很多噪音問(wèn)題。
所有的代碼都在GitHub上-它應(yīng)該是不言自明的,但是我將在這里給出高層次的概述。
這個(gè)項(xiàng)目的主要挑戰(zhàn)是如何將音頻從一個(gè)對(duì)講機(jī)廣播到所有其他對(duì)講機(jī)。
我已經(jīng)以兩種不同的方式實(shí)現(xiàn)了這一點(diǎn)。您可以使用簡(jiǎn)單的哈希定義輕松地在代碼之間切換。
第一種方法是使用UDP廣播。UDP廣播是一種非常簡(jiǎn)單的機(jī)制。您將UDP數(shù)據(jù)包發(fā)送到一個(gè)特殊的IP地址,并且您的路由器將該數(shù)據(jù)包廣播到網(wǎng)絡(luò)上的所有其他設(shè)備。
我們可以安全地在UDP數(shù)據(jù)包中發(fā)送多達(dá)1436個(gè)字節(jié),因此,如果我們以16KHz采樣并使用大約90ms音頻數(shù)據(jù)的8位采樣。因此,我們需要每秒發(fā)送大約11個(gè)數(shù)據(jù)包。這完全在ESP32的功能范圍內(nèi)。
使用廣播UDP的最大優(yōu)點(diǎn)是,我們不需要了解對(duì)等方,我們只需廣播一條消息,任何正在監(jiān)聽(tīng)它的人都會(huì)收到它。我們也不需要所有都連接到的集中式服務(wù)器。所有繁重的工作都由路由器完成。
但是,我們應(yīng)該意識(shí)到UDP的一些缺點(diǎn):
UDP數(shù)據(jù)包的傳遞僅是最大的努力-無(wú)法保證有人會(huì)收到您發(fā)送的數(shù)據(jù)包。
也無(wú)法保證數(shù)據(jù)包的順序-有人可能會(huì)完全隨機(jī)地接收您發(fā)送的數(shù)據(jù)包。
對(duì)于這個(gè)項(xiàng)目,我選擇忽略這兩個(gè)問(wèn)題。對(duì)于廣播數(shù)據(jù)包,我們通常會(huì)停留在同一網(wǎng)絡(luò)中,因此我們可能不會(huì)丟失太多數(shù)據(jù)包,并且我們的數(shù)據(jù)包也可能會(huì)以正確的順序出現(xiàn)。如果他們不這樣做,那么我們只會(huì)在音頻上產(chǎn)生一點(diǎn)噪音和失真。
UDP廣播的另一個(gè)主要優(yōu)點(diǎn)是您可以在臺(tái)式計(jì)算機(jī)或電話上接收數(shù)據(jù)包-因此創(chuàng)建不基于ESP32的其他客戶端非常容易。
我實(shí)現(xiàn)傳輸?shù)牡诙N方法是使用ESP-NOW。ESP-NOW是Esppresif開(kāi)發(fā)的協(xié)議,它使多個(gè)ESP設(shè)備無(wú)需WiFi即可相互通信。
這給我們提供了一個(gè)比UDP選項(xiàng)更大的優(yōu)勢(shì),因?yàn)槲覀儾恍枰猈iFi網(wǎng)絡(luò)就可以使Walkie-Talkie正常工作。ESP-NOW的缺點(diǎn)是它具有250字節(jié)的小得多的數(shù)據(jù)包大小。這意味著我們需要每秒發(fā)送64次數(shù)據(jù)包。我們還具有與UDP相同的缺點(diǎn)-盡最大努力發(fā)送數(shù)據(jù)包,并且不能保證數(shù)據(jù)包將以什么順序到達(dá)。
但是,在我的測(cè)試中,它的表現(xiàn)還算不錯(cuò)。運(yùn)輸問(wèn)題解決后,我們只需要掛接所有物品即可。我們有I2S輸入-它從麥克風(fēng)讀取樣本并將它們傳遞到我們的運(yùn)輸工具。一旦傳輸積累了足夠的數(shù)據(jù)以填充數(shù)據(jù)包,它將通過(guò)UDP或ESP-NOW發(fā)送數(shù)據(jù)。
另一方面,我們有相同的傳輸監(jiān)聽(tīng)數(shù)據(jù)包。每次接收到數(shù)據(jù)包時(shí),它都會(huì)通過(guò)我們的I2S輸出將數(shù)據(jù)排隊(duì)等待播放。I2S輸出只是將采樣輸出到I2S放大器。
為了允許數(shù)據(jù)包花費(fèi)更長(zhǎng)的時(shí)間到達(dá),我們?cè)趥鬏敽虸2S輸出之間有一個(gè)緩沖區(qū)。在開(kāi)始播放樣本之前,我們花了少量時(shí)間-這給了我們一些空閑時(shí)間以允許數(shù)據(jù)包抖動(dòng)。確實(shí)要付出一些音頻延遲的代價(jià)-考慮到所有因素,音頻在制作后大約半秒鐘就會(huì)播放。
總而言之,盡管該項(xiàng)目可行。質(zhì)量并不令人驚奇,但是對(duì)于一個(gè)業(yè)余項(xiàng)目來(lái)說(shuō)肯定足夠了。
與往常一樣,代碼全部在GitHub上。讓我知道您在評(píng)論中的想法。如果您有任何改進(jìn),請(qǐng)打開(kāi)請(qǐng)求。
可以看一下的一些想法:
壓縮音頻以減少帶寬。
自動(dòng)增益控制
消除回聲
如上分享可能還有很多不完善,請(qǐng)隨時(shí)留言交流~
附:
源代碼:https://github.com/atomic14/esp32-walkie-talkie
原理圖:

責(zé)任編輯:pj
-
放大器
+關(guān)注
關(guān)注
146文章
14242瀏覽量
220614 -
麥克風(fēng)
+關(guān)注
關(guān)注
15文章
681瀏覽量
57191 -
對(duì)講機(jī)
+關(guān)注
關(guān)注
34文章
577瀏覽量
50817
發(fā)布評(píng)論請(qǐng)先 登錄
使用ESP-32的內(nèi)置ADC采集對(duì)講機(jī)的音頻,有嚴(yán)重干擾怎么解決?
對(duì)講機(jī)模塊/對(duì)講機(jī)方案/對(duì)講機(jī)
分享一款不錯(cuò)的多功能對(duì)講機(jī)通信系統(tǒng)設(shè)計(jì)方案
構(gòu)建一個(gè)基于ESP32的對(duì)講機(jī)
如何選購(gòu)對(duì)講機(jī)?
談?wù)?b class='flag-5'>對(duì)講機(jī)耳機(jī)的類別
警用無(wú)線對(duì)講機(jī)介紹
對(duì)講機(jī)是怎么分類的_對(duì)講機(jī)分類大全_對(duì)講機(jī)的工作原理介紹
新買的對(duì)講機(jī)怎么用_怎么知道對(duì)講機(jī)的頻率_對(duì)講機(jī)頻率設(shè)置
什么是全國(guó)對(duì)講機(jī)_全國(guó)對(duì)講機(jī)的原理_全國(guó)對(duì)講機(jī)怎么用
防爆對(duì)講機(jī)與普通對(duì)講機(jī)如何區(qū)別?
ESP32對(duì)講機(jī)音頻板

一款基于ESP32的對(duì)講機(jī)傳輸音頻介紹
評(píng)論