在沒有無線電(以及使用ADC、PWM 和I2S/SPI 總線的其他無線電惡作劇)的情況下傳輸900MHz LoRa 幀令人驚訝地遠,包括發送其他RF 數據,以及接收RF 訊號(儘管不可否認不是LoRa 接收器)。
如果您正在尋找 Hackaday 2024 微控制器無線電演講,您可以點擊這裡。
如果您正在尋找 LoLRa 商品(如 T 恤等),請按此處。
筆記
警告
由於我們依賴諧波和混疊,因此微控制器發出的主頻率成分將位於 RF 頻譜中禁止 RF 傳輸的部分。請過濾您的輸出或在不太可能洩漏大量射頻的區域進行測試。在分佈於數百個發射頻率的整個頻譜中,總體EIRP 輸出一般為≪300uW,但實際上,故意在這些頻率上傳輸的設備不可能通過FCC 第15 部分的合規性,即使進行濾波也是如此。
我一直對從沒有專用無線電硬體的微控制器發送和接收無線電訊號著迷。該存儲庫概述了我為進行此解碼而完成的許多項目,以及示例代碼(儘管其中一些受到限制性許可)
一般來說,儲存庫分為許多項目,但按設備類型分類。
僅韌體 LoRa 傳輸,適用於各種處理器。在各種常見、廉價的處理器上發送 LoRa 資料包,無需任何無線電、晶片、外部硬體或內建無線電。雖然不是真正的位元碰撞,但此儲存庫展示瞭如何使用移位暫存器(即 I2S 或 SPI 連接埠)或 APLL,發送可由商用現成 LoRa 閘道和其他晶片解碼的 LoRa 封包。
該存儲庫有兩種主要工作模式。
點擊下面查看此頁面的 Youtube 影片版本:
每當訊號從低到高或從高到低改變狀態時,該電線周圍的電磁場就會產生幹擾。任何時間。不同之處在於,作為一名工程師,您是否會害怕它,將其搖搖晃晃地壓制住,害怕它可能引起的任何 EMI,還是會抓住公牛的角並發出一些手工製作的信號?您需要了解的主要原則是:
第二個原則是訊號混合。如果您創建一個訊號,然後將其與高頻“混合”,您將獲得圍繞該高頻的“圖像”。混合可以用二極體、特殊的射頻設備來完成,甚至只是取樣,就像使用移位暫存器那樣,以穩定的速率輸出位元。
現在,當您意識到這兩個原則實際上可以協同工作時,真正的奇蹟就發生了。您會在基頻處獲得一個影像,在取樣頻率附近獲得一個反射影像,然後在取樣頻率的 ×3 附近,您會獲得另外 2 個影像,即正向影像和反向影像。還有×5、×7等。
有了這個,有了足夠精確的時鐘,我們就可以任意產生我們想要的任何頻率,只要我們的微控制器的GPIO 上有足夠的頻寬來產生它,即使我們產生的「實際」訊號頻率要低得多。
微控制器中的內部振盪器不僅不準確,而且頻率也會抖動。您可能認為這是一個缺點,但事實上,使用微控制器內建的內部振盪器通常可以成為救星,讓您擺脫 EMI/EMC。由於內部振盪器不僅不精確而且不穩定,因此它們可以防止頻譜中較高的各個頻率的諧波,因為時脈速率漂移如此之大。
水晶輸出:
RC 輸出:
請參閱下面的部分,了解 LoRa 訊號實際工作原理的細節,或網路上其他博士都不願意告訴您的事情。
LoRa 通常在 433MHz 或 900MHz 頻譜下運行,通常具有 125kHz 通道。原則上,LoRa 會產生線性調頻脈衝,從一個頻率(低於通道中心 62.5kHz)開始,然後在短時間內(SF7 為 1.024uS),音調攀升至高於通道中心 62.5kHz。
雖然 LoRa 可以與許多不同的通道寬度一起使用,但 125kHz 和 500kHz 都得到很好的支持,而其他通道寬度則無法使用 LR9 等路由器進行配置。
該圖在 X 軸上顯示頻率,在 Y 軸上顯示時間(從上到下)...您可以看到:
方便的是,給定線性調頻脈衝的視窗是穩定的,這取決於擴頻因子。對於上述資料包,對於 SF7,計算結果為每個符號 1,024us,對於 SF8,計算結果為每個符號 2,048us。每個符號/線性調頻脈衝可以透過相位偏移來表示多個位元。
線性調頻脈衝的原始“相位”是灰色編碼的,以便更好地將位元之間的位元錯誤分散到過程的更高層。例如,如果您認為線性調頻脈衝所在的相位相差一位,則它可能會超出 0b1111 和 0b10000 的邊界,並導致 5 位元錯誤。透過格雷編碼,它可以最大限度地減少由相位偏差甚至少數相位產生的位元錯誤。
在LoRa-SDR-Code.h
中從各個線性調頻脈衝中解碼該原始位元流並進行去灰階編碼(請參閱encodeHamming84sx
)後,我們會對這些位元進行轉置/交織,以便可以取出任何一個符號(請參閱diagonalInterleaveSx
)分散所有錯誤,以便可以恢復和美白單個丟失的符號(我相信這實際上是此協議中毫無價值的步驟,如果我錯了請糾正我)請參閱Sx1272ComputeWhitening
。上面的白化是一個糾錯層,可協助修復較低層可能發生的任何位元錯誤(請參閱encodeFec
)。
總的來說,訊息有一個標頭和一個有效負載。請注意,這可能有點棘手,因為標頭有時會使用與有效負載不同的編碼設定。就是這樣。
一旦產生格式正確的資料包,您就可以將它們編碼為線性調頻脈衝並將其傳輸到線路上。
可以在此處找到該協議的更詳細視圖,以獲得更學術的觀點,並在此處找到一些更好的示例(儘管我發現這兩個文件的正確性/清晰度存在一些問題)。
我從 ESP32-S2 開始這個項目,看看是否可以使用內部內建 APLL 輸出訊號,並透過 IOMUX 將 APLL/2 時脈路由出去,答案是可以。因為這會產生一個簡單的方波,而方波在頻譜上具有 F×3、F×5、F×7 等處的諧波,因此如果我將 APLL 設定為 139.06 MHz,它將輸出 69.53 MHz。第 13 次諧波為 903.9 MHz,即第一個 125kHz LoRa 通道。然後,透過調整最低有效 PLL 控制位,我們可以將其從 903.9 MHz - 62.5kHz 調整到 903.9 + 62.5kHz,透過將 APLL 調整到 139.06 MHz - 9.62kHz 到 139.06 MHz + 9.62 kHz。這讓我們可以產生獨特的 LoRa 線性調頻脈衝,而且實際上這是可以接收的!
ESP32-S2 還有另一個技巧 - GPIO 複用器能夠輸出訊號或該訊號的反相。這樣我們就可以差分產生 139.06MHz 訊號,將功率輸出提高 3dB!
然而,ESP32-S2 存在一些問題。值得注意的是:
此外,很少有處理器甚至擁有 APLL,因此儘管取得瞭如此快速的成功,我還是決定繼續...
幾年前,我做了許多使用直接位元流合成來完成一些任務的項目,例如使用 ESP8266 在頻道 3 上廣播 RF 彩色 NTSC 電視或使用乙太網路封包傳輸 AM 無線電。巧妙的技巧之一是,如果您在 SPI 或 I2S 移位暫存器上傳輸位元流,它會導致取樣率出現混疊,影像為 F×3、F×5、F×7 等。頻譜上影像/別名處傳輸波形的大小/形狀。對於通道 3,65MHz 訊號在 40MHz 取樣率附近反射。哈利·奈奎斯特可以去咬一顆檸檬。
即使在極其惡劣的情況下,這種技術也能提供令人難以置信的保真度,這是不直觀的。您可以在您期望的任何地方創建令人驚訝的精確信號。
有多種方法可以實現此目的,但通常使用移位暫存器最簡單。類似於 I2S 或 SPI 匯流排中的移位暫存器。而且,如果您使用 DMA,您可以輕鬆地向移位暫存器提供更多數據,而無需在每個週期中喚醒 CPU。不過,還有其他方法,例如直接切換 IO,或使用計時器在正確的時間打開和關閉 IO,但最簡單的方法是編寫程式碼來產生位元流並將其移出。
對於移位暫存器,必須考慮一些因素,例如確保位元組序列、位元寬和記憶體排列正確,但是,一般來說,您可以跟上,除非存在滯後,例如每個字之間的時間,否則它們通常能夠足夠忠實地表示要從引腳傳輸和移出的輸出上的位元模式。
影片中描述的「lohrcut」涉及編寫一個函數,該函數在給定時間點的情況下確定訊號的幅度。此函數可以確定非常高頻訊號的幅度,然後,取樣率可以是可用的任何物理上可實現的取樣率。這將以低得多的頻率訊號創建高頻訊號的圖像,並使用 0 到 Fs/2 之間的功率來建構它。
另一個問題是閃存,在某些系統上存取不一致或在某些頻率下無法正常工作。在這些情況下,就像在 ESP8266 上一樣,必須將表格讀入 RAM 並從那裡播放。
LoRa 幀是完全封裝的。如果你願意的話,我們可以停在這裡。您甚至可以使用商業網關,但如果不使用 LoRaWAN,幀就無法傳送到像 The Things Network 這樣的代理程式。例如,如果您運行樹莓派網關,您可以接受任何您想要的舊 LoRa 幀,但是,我們更進一步,幫助資料包在世界各地轉發。 LoRaWAN 是「端對端」加密,您的鄰居或網關都無法讀取訊息。不過,奇怪的是——物聯網可以讀取你的訊息,因為它們有加密金鑰。
您可以方便地呼叫lib/lorawan_simple.h
中的GenerateLoRaWANPacket
來處理所有所需的封裝。只需使用此功能即可產生幀並廣播它們!
我們可以傳輸這些訊息。涼爽的。但現在要接收它們,我們要么需要像 LILYGO® T-Beam Meshtastic 之類的設備,要么需要 MikroTik LR9 之類的網關。後者在這裡非常有趣,因為世界各地有數以千計的此類設備,並連接到物聯網。這意味著,如果我們在這些網關之一的聽力範圍內傳輸格式正確的 LoRaWAN 資料包,我們就可以在地球上的其他地方取得該幀!
設定非常簡單。您需要:
筆記
我們只專注於重置幀計數器的 LoRa 幀,但是,如果您可以將最後傳輸的資料包 ID 儲存到部件內的非揮發性快閃記憶體中,則可以避免此步驟。如果沒有這個,您的設備將受到重播攻擊。
筆記
如果使用 MikroTik LR9,請務必將其打開並插入內部天線。從工廠發貨時,它已連接到外部連接埠。
如果您能解決其中任何一個問題,PR 將開放!在我來到這裡之前,我剛剛把計劃花在這個專案上的所有時間都花完了。
特別是對於 LoRa,波的表現非常好,應該完全可以透過定時器電路動態創建,並且不需要任何預先計算,但我還沒有抽出時間來處理它。這樣就不需要有一個大表來將線性調頻脈衝閃現到設備中。
我還想嘗試使用更容易即時創建的自訂位元模式來執行此專案。此外,根據所使用的確切代碼(可能透過採用與黃金代碼相關的技術),甚至可以同時接收具有完全相同編碼的許多訊號。這樣做將非常適合在微控制器上實現“printf”,該微控制器可以由中央 SDR 無線接收,並且處理器空間(和性能)開銷非常低。
此外,添加一個濾波器會很有趣,或者嘗試在沒有任何組件的 PCB 中建立一個濾波器。
此外,嘗試為 900MHz 訊號建立 C 類放大器會非常酷。這會非常酷,因為它高效、極其便宜且簡單,並且還提供高達 10-20dB 的增益!
城市測試於2024年2月23日進行,郊區測試於2022年2月26日進行,農村測試於2022年2月27日進行。
範圍是峰值範圍。可靠運行結束得更早。
TTGO Lora32 增加了 +3dBi 天線。 MikroTik LR9 使用內建天線。
日期 | 寄件人 | 接收者 | SF/CR | 體重 | 筆記 | 範圍 | 平均結束 RSSI/SNR | 基礎 |
---|---|---|---|---|---|---|---|---|
2024-02-23 | CH32V203 | MikroTik LR9 | SF8/CR48 | 125 | 貝爾維尤市中心(市區) | 435' 132m | -98 / -9 | 地面 |
2024-02-23 | CH32V203 | MikroTik LR9 | SF10/CR48 | 500 | 貝爾維尤市中心(市區) | 435' 132m | -90 / -18 | 地面 |
2024-02-26 | CH32V203 | TTGO 勞拉32 | SF8/CR48 | 125 | 米拉蒙特公園(輕郊區+樹林) | >576' >176m | -134 / -12 | 地面 |
2024-02-26 | CH32V203 | TTGO 勞拉32 | SF8/CR48 | 125 | Poo Poo Point Trail 起點(鄉村) | >1117' >340m | -123 / -6 | 地面 |
2024-02-26 | CH32V203 | TTGO 勞拉32 | SF8/CR48 | 125 | 伊瑟闊郊區(+燈光樹) | 2200'669m | -133 / -10 | 地面 |
2024-02-27 | CH32V203 | TTGO 勞拉32 | SF8/CR48 | 125 | Meadowbrook(鄉村)紅色加長天線 | 2220'677m | -135 / -13 | 無人機 |
2024-02-27 | CH32V203 | TTGO 勞拉32 | SF10/CR48 | 500 | Meadowbrook(鄉村)紅色加長天線 | 1752' 534m | -132 / -16 | 無人機 |
2024-02-27 | CH32V203 | TTGO 勞拉32 | SF8/CR48 | 125 | Meadowbrook(鄉村)OVERVOLT 5V 紅色加長天線 | 3996' 1218m | -131 / -12 | 無人機 |
2024-02-27 | CH32V203 | TTGO 勞拉32 | SF8/CR48 | 125 | Meadowbrook(鄉村)灰色 VNA 匹配天線 | 2719' 829m | -131 / -11 | 無人機 |
2024-02-27 | ESP8266@80MHz | TTGO 勞拉32 | SF8/CR48 | 125 | Meadowbrook(鄉村)灰色 VNA 匹配天線 | 2789' 850m | -138 / -13 | 無人機 |
2024-02-27 | ESP8266@173MHz | TTGO 勞拉32 | SF7/CR48 | 125 | Meadowbrook(鄉村)灰色 VNA 匹配天線 | 2812' 857m | -131 / -8 | 無人機 |
2024-02-27 | ESP32-S2 + 位元天線 | TTGO 勞拉32 | SF10/CR48 | 125 | Meadowbrook(鄉村)(註1) | 3428'1044m | -137 / -13 | 地面 |
2024-02-27 | ESP32-S2 + 位元天線 | TTGO 勞拉32 | SF10/CR48 | 125 | 梅多布魯克(鄉村)光降水 | >4895' >1492m | -130 / -8 | 無人機 |
2024-02-27 | ESP32-S2 + Funtenna | TTGO 勞拉32 | SF10/CR48 | 125 | 梅多布魯克(鄉村)光降水 | 705'/215m | -139 / -15 | 無人機 |
2024-02-27 | ESP32-S2 + 位元天線 | TTGO 勞拉32 | SF10/CR48 | 125 | 斯諾誇爾米步道、狗狗公園至裡巴里溪(鄉村)光降水 | 8460' / 2580m | -141 / -16 | 無人機 |