使用STM32的射頻模塊以無線方式發(fā)送和接收數(shù)據(jù)
來源:互聯(lián)網(wǎng)發(fā)布者:念念Brown 關(guān)鍵詞: 微控制器 STM32 射頻模塊 STM32F103C8 更新時間: 2024/05/17
在嵌入式電子產(chǎn)品中制作無線項(xiàng)目變得非常重要和有用,因?yàn)闆]有雜亂的電線,這使得設(shè)備更加方便和便攜。有各種無線技術(shù),例如藍(lán)牙、WiFi、433 MHz RF(射頻)等。每種技術(shù)都有其自身的優(yōu)缺點(diǎn),例如成本、距離或范圍傳輸、速度或吞吐量等。今天我們將使用STM32 的射頻模塊以無線方式發(fā)送和接收數(shù)據(jù)。
在這里,我們將連接一個 433MHz 射頻無線模塊與 STM32F103C8 微控制器。該項(xiàng)目分為兩部分。發(fā)送器將與 STM32 連接,接收器將與 Arduino UNO 連接。發(fā)射和接收部分都會有不同的電路圖和草圖。
在本教程中,RF 發(fā)射器向接收器端發(fā)送兩個值:使用超聲波傳感器測量的距離和電位計ADC值(0 到 4096),該值映射為(0 到 100)之間的數(shù)字。Arduino的RF 接收器接收這兩個值并以無線方式在16x2 LCD 顯示器中打印這些距離和數(shù)字值。
所需組件
STM32F103C8微控制器
Arduino UNO
433Mhz 射頻發(fā)射器和接收器
超聲波傳感器 (HC-SR04)
16x2 液晶顯示器
10k 電位器
面包板
連接電線
433Mhz 射頻發(fā)射器和接收器模塊)
射頻發(fā)射器引腳:
射頻接收器引腳:
433 MHz 模塊規(guī)格:
接收器工作電壓:3V 至 5V
發(fā)射器工作電壓:3V 至 5V
工作頻率:433 MHz
傳輸距離:3米(不帶天線)至100米(最大)
調(diào)制技術(shù):ASK(幅移鍵控)
數(shù)據(jù)傳輸速度:10Kbps
STM32F103C8射頻發(fā)射器電路圖
射頻發(fā)射器和 STM32F103C8 之間的電路連接:
超聲波傳感器和 STM32F103C8 之間的電路連接:
STM32F103C8 連接一個10k 電位器,為 STM32 的 ADC 引腳 PA0 提供輸入模擬值(0 至 3.3V)。
帶有Arduino Uno的RF接收器電路圖
射頻接收器和 Arduino UNO 之間的電路連接:
16x2 LCD 和 Arduino UNO 之間的電路連接:
下面將簡要解釋編碼。草圖將分為兩部分,第一部分是發(fā)射器部分,另一部分是接收器部分。所有草圖文件和工作視頻將在本教程結(jié)束時提供。要了解有關(guān)射頻模塊與 Arduino Uno 接口的更多信息,請點(diǎn)擊鏈接。
為無線射頻傳輸編程STM32F103C8
STM32F103C8 可以使用 Arduino IDE 進(jìn)行編程。無需 FTDI 編程器或 ST-Link即可將代碼上傳到 STM32F103C8。只需通過 STM32 的 USB 端口連接到 PC 并開始使用ARDUINO IDE進(jìn)行編程。
首先包含 Radiohead 庫,可以從這里下載。因?yàn)檫@個庫使用 ASK(幅移鍵控技術(shù))來傳輸和接收數(shù)據(jù)。這使得編程非常容易。您可以通過進(jìn)入 Sketch->include library->Add .zip library 在草圖中包含庫。
#include
正如在發(fā)射器端的本教程中一樣,超聲波傳感器用于測量距離,因此定義了觸發(fā)和回波引腳。
#define trig
接下來,將 RH_ASK 庫的對象名稱設(shè)置為 rf_driver,并使用諸如速度 (2000)、RX 引腳 (PA9) 和 TX 引腳 (PA10) 等參數(shù)。
RH_ASK rf_driver(2000, PA9, PA10);
接下來,聲明該程序所需的 Strings 變量。
字符串傳輸號碼; 字符串傳輸距離; 字符串傳輸;
接下來在 void setup() 中,初始化 RH_ASK rf_driver 的對象。
rf_driver.init();
之后觸發(fā)引腳設(shè)置為 OUTPUT 引腳,PA0(連接到電位器)和回波引腳設(shè)置為 INPUT 引腳。串行通信以 9600 的波特率開始。
序列號.開始(9600); pinMode(PA0,輸入); pinMode(echoPin,輸入); pinMode(trigPin,輸出);
接下來在 void loop() 中,首先將輸入模擬電壓的電位器值轉(zhuǎn)換為數(shù)字值(找到 ADC 值)。由于STM32 的 ADC具有 12 位分辨率。因此,數(shù)字值從 (0 到 4096) 變化,映射到 (0 到 100)。
int 模擬輸入 = 模擬讀取(PA0); int pwmvalue = map(模擬輸入,0,4095,0,100);
接下來,使用超聲波傳感器測量距離,方法是設(shè)置觸發(fā)器高低,延遲 2 微秒。
數(shù)字寫入(trigPin,低); 延遲微秒(2); digitalWri
回波針感測反射回來的波,即觸發(fā)波反射回來的持續(xù)時間用于使用公式計算物體的距離。通過點(diǎn)擊鏈接了解更多超聲波傳感器如何計算距離。
持續(xù)時間長 = pulseIn(echoPin, HIGH); 浮動距離=持續(xù)時間*0.034/2;
現(xiàn)在測量的數(shù)據(jù)數(shù)量和距離都轉(zhuǎn)換為字符串?dāng)?shù)據(jù)并存儲在相應(yīng)的字符串變量中。
傳輸數(shù)=字符串(pwm值); 傳輸距離 = 字符串(距離);
兩個字符串都作為一行添加并存儲在稱為傳輸?shù)淖址校禾枴埃庇糜诜指魞蓚€字符串。
傳輸=傳輸_pwm +“,”+傳輸距離;
傳輸字符串被轉(zhuǎn)換為字符數(shù)組。
const char *msg = transmit.c_str();
數(shù)據(jù)被傳輸并等待直到它被發(fā)送。
rf_driver.send((uint8_t *)msg, strlen(msg)); rf_driver.w
發(fā)送的字符串?dāng)?shù)據(jù)也顯示在串行監(jiān)視器中。
序列號.println(msg);
將 Arduino UNO 編程為 RF 接收器
Arduino UNO 使用 Arduino IDE 進(jìn)行編程。在接收器部分,從發(fā)射器部分發(fā)送并由 RF 接收器模塊接收的數(shù)據(jù)和接收到的字符串?dāng)?shù)據(jù)被拆分為各自的數(shù)據(jù)(距離和數(shù)量)并顯示在 16x2 LCD 顯示屏上。
讓我們簡要地看一下接收器編碼:
就像在發(fā)射器部分一樣,首先包含 RadiohHead 庫。因?yàn)檫@個庫使用 ASK(幅移鍵控技術(shù))來傳輸和接收數(shù)據(jù)。這使得編程非常容易。
#include
由于這里使用的是 LCD 顯示器,所以還包括了液晶庫。
#include
與 Arduino UNO 連接的 16x2 LCD 顯示引腳使用 lcd 作為對象指定和聲明。
液晶液晶(2,3,4,5,6,7);
接下來聲明用于存儲字符串?dāng)?shù)據(jù)的字符串?dāng)?shù)據(jù)變量。
字符串 str_receive; 字符串 str_number; 字符串 str_distance;
Radiohead 庫的對象已聲明。
RH_ASK 射頻;
現(xiàn)在在void setup() 中,LCD 顯示設(shè)置為 16x2 模式,并顯示并清除歡迎消息。
lcd.開始(16,2); lcd.print("電路文摘"); lcd.setCu
之后,初始化rf對象。
rf.init();
現(xiàn)在在void loop() 中,數(shù)組 buf[] 被聲明為大小為 7。因?yàn)閺陌l(fā)送器發(fā)送的數(shù)據(jù)有 7,包括“,”。因此,根據(jù)要傳輸?shù)臄?shù)據(jù)進(jìn)行更改。
uint8_t buf[7]; uint8_t buflen = sizeof(buf);
如果該字符串在 rf 接收器模塊中可用,則 if 函數(shù)會檢查大小并執(zhí)行。rf.recv()用于接收數(shù)據(jù)。
如果 (rf.recv(buf, &buflen))
buf具有接收到的字符串,因此接收到的字符串存儲在str_receive字符串變量中。
str_receive = String((char*)buf);
如果檢測到兩個字符串之間的“,”,則此for循環(huán)用于將接收到的字符串分成兩部分。
for (int i = 0; i < str_receive.length(); i++) { if (str_receive.substring(i, i+1) == ",") { str_number = str_receive.substring(0, i); str_distance = str_receive.substring(i+1); 休息; }
聲明兩個值的兩個 char 數(shù)組,通過將字符串轉(zhuǎn)換為字符數(shù)組,將分成兩個的字符串存儲在相關(guān)數(shù)組中。
字符數(shù)串[4]; 字符距離字符串[3]; str_distance.toCharArray(distancestring,3); str_number.toCharArray(numberstring,3);
之后使用 atoi() 將字符數(shù)組轉(zhuǎn)換為整數(shù)
int 距離 = atoi(距離字符串); int number = atoi(numberstring);
轉(zhuǎn)換成整數(shù)值后,距離和數(shù)字值顯示在 16x2 LCD 顯示屏中
lcd.setCursor(0,0); lcd.print("編號:"); lcd.print(數(shù)字); lcd.setCursor(0,1); lcd.print("距離:"); lcd.print(距離); lcd.print("cm");
分別在STM32和Arduino UNO中上傳發(fā)射器和接收器代碼后,使用STM32測量的數(shù)字和物體距離等數(shù)據(jù)通過RF發(fā)射器傳輸?shù)絉F接收器,接收到的值以無線方式顯示在LCD顯示屏上。
測試基于 STM 32 的射頻發(fā)射器和接收器
1.當(dāng)數(shù)字為0且物體距離為6cm時。
2.當(dāng)數(shù)字47和物體距離為3cm時。
發(fā)射器代碼(STM32F103C8):
//433MHZ射頻發(fā)射器與STM32F103C8
//發(fā)射機(jī)代碼
//電路文摘
#include
這里還沒有內(nèi)容,您有什么問題嗎?
電子電路資源推薦
- 無線通信原理與應(yīng)用(第二版)
來源:下載中心
- 常用直流穩(wěn)壓電源電路應(yīng)用200例
來源:下載中心
- 基于Verilog HDL的FPGA設(shè)計和FPGA應(yīng)用(英特爾官方教程)
來源:大學(xué)堂
- ADC與DAC
來源:大學(xué)堂
- 電工基礎(chǔ):電路的組成
來源:電路圖
- 基爾霍夫定律:支路、節(jié)點(diǎn)、回路和網(wǎng)孔
來源:電路圖
推薦帖子 最新更新時間:2025-06-16 13:37
- 為什么語音IC接上功放電路后就沒有聲音了呢
- 求大神們看看是電路哪里出了問題,喇叭直接接語音IC是可以播放聲音的,但是接了功放后就沒有聲音了,。功放的1腳給的是高 為什么語音IC接上功放電路后就沒有聲音了呢 估計是接插件發(fā)生短路、焊接出現(xiàn)短路、功放電路中元件損壞 既然 喇叭直接接語音IC是可以播放聲音的 ,那么你的語
吃星星的狼
模擬電子
- 【RT-Thread軟件包應(yīng)用作品】+開箱和開發(fā)環(huán)境建立
- 開箱和環(huán)境建立 開箱 打開紙箱,看到一個塑料小盒子,里面裝置本次使用的開發(fā)板,一條usb數(shù)據(jù)線,一個遙控器和兩條杜邦想。 正面細(xì)節(jié)圖 背面細(xì)節(jié)圖 連上USB數(shù)據(jù)線,開關(guān)達(dá)到 ON ,首次上電運(yùn)行: 后面還有一頁是二
我愛下載
實(shí)時操作系統(tǒng)RTOS
- 國內(nèi)有好的EDA設(shè)計工具廠商嗎
- 我知道EDA大巨頭都是國外的,國內(nèi)有好的EDA設(shè)計工具廠商嗎? 國內(nèi)有好的EDA設(shè)計工具廠商嗎 前兩天看到了一片列舉國內(nèi)做EDA軟件的,有哪些忘了 我知道的有華大九天,做的EDA是IC設(shè)計上的某些工具。。 知道有一個 和某個PCB打樣商城平臺綁定一起 真正從底層做
kernelkoder
PCB設(shè)計
- 【國賽專訪】“三只弱雞”抱回H題一等獎,憑運(yùn)氣獲獎的來啦!?
- 你遇到的獲得國賽一等獎是不是一般都是這樣的: 從小拆裝收音機(jī)、電視機(jī)的發(fā)燒友,電子工程師二代、精通模電、數(shù)電的超級學(xué)霸 那你有沒有遇到這樣的: 入學(xué)前電子基礎(chǔ)幾乎為零,參賽時還是大一學(xué)生、直到現(xiàn)在模電知識還很欠缺 卻獲得了H題 模擬電磁曲射炮的國家一等獎,
nmg
電子競賽
- 【零知ESP8266教程】快速入門25 blynk控制RGB LED
- 本文講解繼續(xù)使用blynk app+服務(wù)器(本地) + 零知ESP8266硬件的方法,通過手機(jī)APP控制RGB led三色燈。 一、硬件 1.電腦,windows系統(tǒng) 2.零知ESP8266開發(fā)板 3.智能手機(jī)一部 + app(Blynk) 4.micro-usb線 5.RGB
roc2
stm32/stm8
- Qorvo收購Active-Semi背后你不知道的二三事!
- Qorvo為什么收購Active-Semi? 這首先從Active-Semi所關(guān)注的市場的發(fā)展前景看出點(diǎn)端倪。如下圖所示,電源管理在Qorvo所專注的IDP(包括5G基站、國防有源相控陣、汽車和物聯(lián)網(wǎng))市場的營收貢獻(xiàn)將會越來越多。 這也是Active-Sem
alan000345
無線連接
- CML電平擺幅
- PIC32MX250F128B請教?
- 想請教大家如何選擇光耦
- DSP的軟件等待的如何使用?
- 求教MAX1898用什么仿真?
- 如何選擇DSP的外部存儲器?
- 關(guān)于TLV5616的12位DAC問題
- 基于查表法弱磁的電動汽車永磁同步電機(jī)dq電流查詢表自動生成開源程序
- 測量磁阻問題
- 《Linux操作系統(tǒng)-Exynos4412》如何使用BusyBox制作最小文件系統(tǒng)
- 求組無線接收組別和頻道的知識,關(guān)于什么433
- 為什么FIQ模式?jīng)]有得到廣泛應(yīng)用
- LLAKG:Arduino 自動澆花系統(tǒng)(第1集:系統(tǒng)構(gòu)想與功能簡介)
- 吉時利源表-一臺比擬五臺測試儀器
- 概述FPGA燒寫JIC文件到底是個怎樣的過程
- 學(xué)習(xí)TMS320F28335了解一下 DMA配置詳解
- 基于TMS320DM642的網(wǎng)絡(luò)攝像機(jī)設(shè)計
- SHT31測評+開箱
- 開關(guān)電源輸入濾波電路怎么設(shè)計?
- TI C2000 Piccolo單芯片——實(shí)現(xiàn)雙軸伺服電機(jī)和馬達(dá)控制
- RT9059 3A、超低壓差固定穩(wěn)壓器的典型應(yīng)用
- FRDM-KW019032: 面向Kinetis? KW0x的Freedom開發(fā)板
- 直流和步進(jìn)電機(jī)驅(qū)動IC —— TC78H621FNG
- 水平雙板連接測試
- LTM4619,4.5V 至 26.5V 輸入至雙路 3.3V 和 1.2V 輸出,每個輸出電流均為 4A
- 使用 Analog Devices 的 LTC1439IG 的參考設(shè)計
- REF192 低壓差電壓基準(zhǔn)的典型應(yīng)用電路,用于低功率應(yīng)變計電路
- 白嫖信仰尺!
- LTC4232-1 5A 集成熱插拔控制器的典型應(yīng)用
- ADP162-4.2-EVALZ,ADP162-AUJZ-4.2-R7線性穩(wěn)壓器4.2V評估板