這是一款基于ESP32的對講機。它使用UDP廣播或ESP-NOW傳輸音頻。
硬件部件
Adafruit I2S 3W D類放大器突破-MAX98357A × 1個
I2S MEMS麥克風突破無聊× 1個
通用4ohm或8ohm揚聲器 × 1個
通用ESP32開發(fā)板× 1個
按鈕開關(可選)× 1個
描述
我們使用ESP32制作了一個Walkie-Talkie。音頻數(shù)據通過UDP廣播或ESP-NOW傳輸。因此,對講機甚至可以在沒有WiFi網絡的情況下工作!我以I2S麥克風和I2S放大器為基礎-只需稍作改動,它就可以與模擬麥克風和頭戴式耳機同樣工作。
細節(jié)
下方錄像帶,概述了該項目詳情。
您可以在以下位置訪問Fusion360項目:https ://a360.co/2PXgAUS-因此,如果需要,可以隨時打印自己的版本。
對于視頻中的麥克風,我使用的是我自己的ICS-43434麥克風板,但它可以與INMP441麥克風板同樣良好地工作。
這兩個都是直接與ESP32交互的I2S麥克風。
I2S 3W放大器板來自Adafruit,并為揚聲器供電。這也直接與ESP32交互。對于ESP32開發(fā)板,我使用的是TinyPICO,但是可以使用任何通用開發(fā)板,因為我們在此項目中未使用任何特殊功能。
我使用的是定制PCB-(由PCBWay的優(yōu)秀人才制作),與往常一樣,他們做得很好,而且我對這些板的外觀感到非常滿意。我有很多音頻項目,能夠將所有東西連接在一起而不用擔心電線到處都是很好,這真是太好了。我所做的僅有的一點遺漏是不會斷開其余的GPIO引腳-因此,我認為我將盡快開發(fā)該板的版本2。
這是指向EasyEDA上的原理圖和PCB 的鏈接,如果需要,可以直接從PCBWay訂購該板的鏈接。
話雖如此,您實際上不需要PCB,您可以輕松地將所有東西連接到面包板上,而這正是我制作原型時所做的。
原理圖非常簡單-麥克風和揚聲器都使用I2S板,這使它們與ESP32的接線非常簡單。
當然,您可以修改代碼以將內置ADC用于輸入,將內置DAC用于輸出。如果要使用模擬麥克風板和耳機插孔進行輸出,則非常方便。
我在板上添加了一些額外的電路,以為麥克風創(chuàng)建干凈的電源。如果您觀看了我以前的一些視頻,那么您會想起來,使用WiFi時,我們在麥克風上會聽到很多噪音。
為解決此噪聲問題,我們通過從電池直接饋電為麥克風創(chuàng)建干凈的3.3v電源,我們使用LC濾波器對其進行濾波,然后將其傳遞至低壓降穩(wěn)壓器。這為我們提供了一個非常好的,干凈的麥克風電源,從而消除了很多噪音問題。
所有的代碼都在GitHub上-它應該是不言自明的,但是我將在這里給出高層次的概述。
這個項目的主要挑戰(zhàn)是如何將音頻從一個對講機廣播到所有其他對講機。
我已經以兩種不同的方式實現(xiàn)了這一點。您可以使用簡單的哈希定義輕松地在代碼之間切換。
第一種方法是使用UDP廣播。UDP廣播是一種非常簡單的機制。您將UDP數(shù)據包發(fā)送到一個特殊的IP地址,并且您的路由器將該數(shù)據包廣播到網絡上的所有其他設備。
我們可以安全地在UDP數(shù)據包中發(fā)送多達1436個字節(jié),因此,如果我們以16KHz采樣并使用大約90ms音頻數(shù)據的8位采樣。因此,我們需要每秒發(fā)送大約11個數(shù)據包。這完全在ESP32的功能范圍內。
使用廣播UDP的最大優(yōu)點是,我們不需要了解對等方,我們只需廣播一條消息,任何正在監(jiān)聽它的人都會收到它。我們也不需要所有都連接到的集中式服務器。所有繁重的工作都由路由器完成。
但是,我們應該意識到UDP的一些缺點:
UDP數(shù)據包的傳遞僅是最大的努力-無法保證有人會收到您發(fā)送的數(shù)據包。
也無法保證數(shù)據包的順序-有人可能會完全隨機地接收您發(fā)送的數(shù)據包。
對于這個項目,我選擇忽略這兩個問題。對于廣播數(shù)據包,我們通常會停留在同一網絡中,因此我們可能不會丟失太多數(shù)據包,并且我們的數(shù)據包也可能會以正確的順序出現(xiàn)。如果他們不這樣做,那么我們只會在音頻上產生一點噪音和失真。
UDP廣播的另一個主要優(yōu)點是您可以在臺式計算機或電話上接收數(shù)據包-因此創(chuàng)建不基于ESP32的其他客戶端非常容易。
我實現(xiàn)傳輸?shù)牡诙N方法是使用ESP-NOW。ESP-NOW是Esppresif開發(fā)的協(xié)議,它使多個ESP設備無需WiFi即可相互通信。
這給我們提供了一個比UDP選項更大的優(yōu)勢,因為我們不需要WiFi網絡就可以使Walkie-Talkie正常工作。ESP-NOW的缺點是它具有250字節(jié)的小得多的數(shù)據包大小。這意味著我們需要每秒發(fā)送64次數(shù)據包。我們還具有與UDP相同的缺點-盡最大努力發(fā)送數(shù)據包,并且不能保證數(shù)據包將以什么順序到達。
但是,在我的測試中,它的表現(xiàn)還算不錯。運輸問題解決后,我們只需要掛接所有物品即可。我們有I2S輸入-它從麥克風讀取樣本并將它們傳遞到我們的運輸工具。一旦傳輸積累了足夠的數(shù)據以填充數(shù)據包,它將通過UDP或ESP-NOW發(fā)送數(shù)據。
另一方面,我們有相同的傳輸監(jiān)聽數(shù)據包。每次接收到數(shù)據包時,它都會通過我們的I2S輸出將數(shù)據排隊等待播放。I2S輸出只是將采樣輸出到I2S放大器。
為了允許數(shù)據包花費更長的時間到達,我們在傳輸和I2S輸出之間有一個緩沖區(qū)。在開始播放樣本之前,我們花了少量時間-這給了我們一些空閑時間以允許數(shù)據包抖動。確實要付出一些音頻延遲的代價-考慮到所有因素,音頻在制作后大約半秒鐘就會播放。
總而言之,盡管該項目可行。質量并不令人驚奇,但是對于一個業(yè)余項目來說肯定足夠了。
與往常一樣,代碼全部在GitHub上。讓我知道您在評論中的想法。如果您有任何改進,請打開請求。
可以看一下的一些想法:
壓縮音頻以減少帶寬。
自動增益控制
消除回聲
如上分享可能還有很多不完善,請隨時留言交流~
附:
源代碼:https://github.com/atomic14/esp32-walkie-talkie
原理圖:
責任編輯:pj
-
放大器
+關注
關注
143文章
13528瀏覽量
212905 -
麥克風
+關注
關注
15文章
630瀏覽量
54744 -
對講機
+關注
關注
33文章
544瀏覽量
48365
發(fā)布評論請先 登錄
相關推薦
評論