0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于微控制器的433MHz發(fā)射器和接收器模塊間的通信方案

454398 ? 來(lái)源:一板網(wǎng) ? 作者:風(fēng)箏 ? 2020-10-28 14:04 ? 次閱讀

在制作基于微控制器的項(xiàng)目時(shí),有時(shí)會(huì)需要在兩個(gè)設(shè)備之間進(jìn)行通信,要么是基于雙工/收發(fā)器的操作(兩個(gè)設(shè)備都可以同時(shí)發(fā)送和接收),要么是基于半雙工的操作,其中通信是一個(gè)單向的(正在接收的設(shè)備無(wú)法發(fā)送,以及正在發(fā)送數(shù)據(jù)的設(shè)備無(wú)法接收)。

有很多方式可以實(shí)現(xiàn)上述兩種通信模式中的任何一種,并且這些選擇通常取決于項(xiàng)目的需求,尤其是設(shè)備之間的距離和成本。對(duì)于兩個(gè)微控制器之間的短距離、低預(yù)算的通信方式,其中一種最優(yōu)選使用的方式是使用433MHz RF發(fā)送器和接收器模塊的射頻通信。在本篇文章中,我們將介紹如何使用這些模塊在兩個(gè)Arduino開(kāi)發(fā)板之間建立通信。

433 MHz發(fā)射器和接收器模塊

這些模塊因其低成本和易用性在創(chuàng)客DIY愛(ài)好者中非常受歡迎。它們用于兩個(gè)微控制器之間的所有短距離、半雙工的通信形式,其中一個(gè)微控制器用作發(fā)送器,另一個(gè)微控制器用作接收器。這些模塊是ASK(幅移鍵控)或OOK(開(kāi)關(guān)鍵控)型RF模塊,這意味著它們?cè)诎l(fā)送邏輯“零”時(shí)通常不消耗功率,因此消耗的功率非常低。這種低功耗使其在基于電池的實(shí)施中非常有用。下面列出了一些發(fā)射器和接收器模塊的規(guī)格。

433MHz發(fā)射器模塊的規(guī)格

√ 工作電壓:3V – 12V

√ 工作電流:最大小于40mA,最小9mA

√ 諧振模式:(SAW)

√ 調(diào)制模式:ASK

√ 工作頻率:433.92MHz

√ 發(fā)射功率:25mWF

√ 頻率誤差:+ 150kHz(max)

√ 通訊速率:小于10Kbps

√ 發(fā)射范圍:90m(在開(kāi)放空間)

433MHz接收器模塊規(guī)格

√ 工作電壓:5.0VDC + 0.5V

√ 工作電流:≤5.5mAmax

√ 調(diào)制模式:OOK / ASK

√ 工作頻率:433.92MHz

√ 帶寬:2MHz

√ 靈敏度:超過(guò)–100dBm(50Ω)

為了演示使用這些模塊可以輕松地將無(wú)線功能添加到項(xiàng)目中,我們將制作一個(gè)帶有遠(yuǎn)程數(shù)據(jù)顯示的氣象站。氣象站將主要由溫濕度傳感器和433 RF發(fā)射器模塊組成。它將測(cè)量環(huán)境的溫度和濕度,并將其通過(guò)RF發(fā)送器發(fā)送到ST7735 1.8寸彩色TFT顯示屏上的顯示單元(通過(guò)RF接收器模塊接收)。

所需的組件

● Arduino Uno開(kāi)發(fā)板

● 433Mhz射頻套件

● DHT22溫濕度傳感器

● 1.8寸彩色TFT顯示屏

● 面包板

● 跳線

原理圖

該項(xiàng)目有兩個(gè)原理圖。第一個(gè)用于發(fā)送器,該發(fā)送器獲取環(huán)境的溫度和濕度,并將其發(fā)送到項(xiàng)目的接收器,后者在顯示屏上顯示數(shù)據(jù)。

發(fā)送器電路原理

發(fā)送器電路包括一個(gè)Arduino開(kāi)發(fā)板、DHT22溫濕度傳感器以及433MHz RF發(fā)送器模塊。當(dāng)Arduino與計(jì)算機(jī)斷開(kāi)連接時(shí),可以使用電池組為Arduino提供電源。如下圖所示連接組件。

接收器電路原理圖

接收器電路由433 MHz射頻接收器模塊、ST7735 1.8寸彩色TFT顯示屏和Arduino Uno開(kāi)發(fā)板組成。如下圖所示連接組件。

完成所有連接后,我們現(xiàn)在可以為該項(xiàng)目編寫(xiě)代碼。

代碼

就像我們必須搭建兩個(gè)設(shè)備一樣,我們將為該項(xiàng)目編寫(xiě)兩個(gè)不同的代碼。其中一個(gè)代碼是控制發(fā)送器,另一種代碼是控制接收器。為了輕松編寫(xiě)本文的代碼,我們將使用可輕松驅(qū)動(dòng)項(xiàng)目各部分的庫(kù)。對(duì)于RF模塊,我們將使用virtual wire庫(kù)來(lái)發(fā)送和接收數(shù)據(jù),而對(duì)于接收到的數(shù)據(jù)的顯示,我們將使用Adafruit GFX和Adafruit ST7735庫(kù)來(lái)輕松更新ST7735 LCD顯示屏。我們將使用Adafruit DHT傳感器庫(kù)輕松地從DHT22傳感器獲取溫度和濕度數(shù)據(jù)。

代碼背后的算法很簡(jiǎn)單。對(duì)于發(fā)射器,從DHT22獲取溫度和濕度值,然后通過(guò)RF發(fā)射器發(fā)送到接收器。對(duì)于接收器,使用RF接收器模塊獲取由發(fā)送器發(fā)送的溫度和濕度值,然后在LCD上顯示。與往常一樣,我們將對(duì)這兩個(gè)項(xiàng)目的代碼進(jìn)行簡(jiǎn)要說(shuō)明。

發(fā)射器的代碼

首先包含將在代碼中使用的庫(kù)。

//Written by Nick Koumaris

//info@educ8s.tv

#include 《VirtualWire.h》

#include “DHT.h”

之后,我們聲明將DHT連接到的Arduino的引腳,并指定要使用的DHT的類(lèi)型。

#define DHTPIN 4

#define DHTTYPE DHT22

接下來(lái),我們定義Arduino的引腳,該引腳將用作我們的數(shù)據(jù)傳輸引腳(連接到RF發(fā)送器模塊的數(shù)據(jù)引腳),然后創(chuàng)建將一個(gè)用于發(fā)送數(shù)據(jù)的結(jié)構(gòu)體package。

const int led_pin = 13;

const int transmit_pin = 12;

struct package

{

float temperature ;

float humidity ;

};

接下來(lái),我們定義一個(gè)package實(shí)例,并創(chuàng)建DHT類(lèi)的實(shí)例以處理DHT傳感器。

typedef struct package Package;

Package data;

DHT dht(DHTPIN, DHTTYPE);

完成這些操作后,我們轉(zhuǎn)到void setup()函數(shù),在其中設(shè)置TX引腳和其他參數(shù)以初始化RF模塊。

void setup()

{

// Initialise the IO and ISR

vw_set_tx_pin(transmit_pin);

vw_set_ptt_inverted(true); // Required for DR3100

vw_setup(500); // Bits per sec

pinMode(led_pin, OUTPUT);

}

接下來(lái)是void loop()函數(shù),我們可以使用 readSensor()函數(shù)獲取溫度和濕度。獲取數(shù)據(jù)后,使用vw_send()函數(shù)發(fā)送數(shù)據(jù)。延遲2000毫秒,以在數(shù)據(jù)之間創(chuàng)建一段時(shí)間間隔,并確保發(fā)送前另一個(gè)已發(fā)送完成。

void loop()

{

digitalWrite(led_pin, HIGH); // Flash a light to show transmitting

readSensor();

vw_send((uint8_t *)&data, sizeof(data));

vw_wait_tx(); // Wait until the whole message is gone

digitalWrite(led_pin, LOW);

delay(2000);

}

接收器的代碼

首先包含將要使用的庫(kù)。

//Written by Nick Koumaris

//info@educ8s.tv

#include 《VirtualWire.h》

#include 《Adafruit_ST7735.h》

#include 《Adafruit_GFX.h》

接下來(lái),我們聲明與LCD引腳相連的Arduino引腳。

#define TFT_CS 10

#define TFT_RST 8

#define TFT_DC 9

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

// Option 2: use any pins but a little slower

#define TFT_SCLK 13 // set these to be whatever pins you like!

#define TFT_MOSI 11 // set these to be whatever pins you like!

接下來(lái),我們聲明RF接收器模塊的數(shù)據(jù)引腳所連接的Arduino引腳(receive_pin),并創(chuàng)建char型變量來(lái)保存溫度和濕度值。

const int receive_pin = 12;

char temperatureChar[10];

char humidityChar[10];

接下來(lái),我們創(chuàng)建一個(gè)類(lèi)似于發(fā)射器代碼中的結(jié)構(gòu)體package。

struct package

{

float temperature = 0.0;

float humidity = 0.0;

};

完成此操作后,我們轉(zhuǎn)到void setup()函數(shù),在該函數(shù)中我們初始化顯示屏,RF接收器模塊設(shè)置比特率并啟動(dòng)接收器。

void setup()

{

tft.initR(INITR_BLACKTAB);

tft.fillScreen(ST7735_BLACK);

printUI();

delay(1000);

// Initialise the IO and ISR

vw_set_rx_pin(receive_pin);

vw_setup(500); // Bits per sec

vw_rx_start(); // Start the receiver PLL running

}

接下來(lái),是void loop()函數(shù)。通過(guò)使用vw_have_message()函數(shù)檢查是否已收到消息。如果收到消息,我們將從中提取溫度和濕度數(shù)據(jù),并將其顯示在LCD上。

void loop()

{

uint8_t buf[sizeof(data)];

uint8_t buflen = sizeof(data);

if (vw_have_message()) // Is there a packet for us?

{

vw_get_message(buf, &buflen);

memcpy(&data,&buf,buflen);

Serial.print(“ Package:”);

Serial.print(data.temperature);

String temperatureString = String(data.temperature,1);

temperatureString.toCharArray(temperatureChar,10);

tft.fillRect(10,20,80,30,ST7735_BLACK);

printText(temperatureChar, ST7735_WHITE,10,20,3);

String humidityString = String(data.humidity,1);

humidityString.toCharArray(humidityChar,10);

tft.fillRect(10,95,80,100,ST7735_BLACK);

printText(humidityChar, ST7735_WHITE,10,95,3);

Serial.print(“ ”);

Serial.println(data.humidity);

}

}

該代碼還包括一些用于以更用戶(hù)友好的方式顯示結(jié)果的函數(shù)。

void printText(char *text, uint16_t color, int x, int y,int textSize)

{

tft.setCursor(x, y);

tft.setTextColor(color);

tft.setTextSize(textSize);

tft.setTextWrap(true);

tft.print(text);

}

void printUI()

{

printText(“TEMPERATURE”, ST7735_GREEN,30,5,1); // Temperature Static Text

printText(“o”, ST7735_WHITE,90,13,2);

printText(“C”, ST7735_WHITE,105,20,3);

printText(“HUMIDITY”, ST7735_BLUE,30,80,1); // Temperature Static Text

printText(“%”, ST7735_WHITE,90,95,3);

}

效果演示

將相應(yīng)的代碼上傳到每個(gè)Arduino開(kāi)發(fā)板。 兩個(gè)Arduino開(kāi)發(fā)板都可以使用電池組供電。 開(kāi)機(jī)后幾分鐘,您應(yīng)該會(huì)在LCD上看到溫度和濕度數(shù)據(jù)。

433MHz發(fā)射器和接收器模塊的范圍通常很小,但是通過(guò)焊接外部天線,它們的通訊范圍可以增大。
編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7454

    瀏覽量

    150851
  • 接收器
    +關(guān)注

    關(guān)注

    14

    文章

    2454

    瀏覽量

    71751
  • 發(fā)射器
    +關(guān)注

    關(guān)注

    6

    文章

    842

    瀏覽量

    53355
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    TMS320DM6467支持HDMI發(fā)射器/接收器

    電子發(fā)燒友網(wǎng)站提供《TMS320DM6467支持HDMI發(fā)射器/接收器.pdf》資料免費(fèi)下載
    發(fā)表于 10-15 11:36 ?0次下載
    TMS320DM6467支持HDMI<b class='flag-5'>發(fā)射器</b>/<b class='flag-5'>接收器</b>

    無(wú)線充電接收器怎么使用

    無(wú)線充電接收器是一種利用電磁感應(yīng)原理實(shí)現(xiàn)無(wú)線充電的設(shè)備,它能夠?qū)o(wú)線充電發(fā)射器發(fā)出的電磁波轉(zhuǎn)換為電能,為手機(jī)、耳機(jī)、智能手表等設(shè)備提供充電。無(wú)線充電接收器的使用過(guò)程相對(duì)簡(jiǎn)單,但要實(shí)現(xiàn)高效、安全的充電
    的頭像 發(fā)表于 09-02 09:20 ?552次閱讀

    無(wú)線充電接收器對(duì)手機(jī)有損害嗎

    原理。在無(wú)線充電系統(tǒng)中,通常包括一個(gè)發(fā)射器(無(wú)線充電底座)和一個(gè)接收器(內(nèi)置于手機(jī)或其他設(shè)備中)。發(fā)射器產(chǎn)生一個(gè)交變磁場(chǎng),而接收器中的線圈感應(yīng)這個(gè)磁場(chǎng),從而產(chǎn)生電流,為設(shè)備充電。 無(wú)線
    的頭像 發(fā)表于 09-02 09:15 ?464次閱讀

    適用于無(wú)線基礎(chǔ)設(shè)施的高速LVDS線路發(fā)射器/接收器SC5108

    適用于無(wú)線基礎(chǔ)設(shè)施的高速LVDS線路發(fā)射器/接收器SC5108
    的頭像 發(fā)表于 08-01 10:06 ?276次閱讀
    適用于無(wú)線基礎(chǔ)設(shè)施的高速LVDS線路<b class='flag-5'>發(fā)射器</b>/<b class='flag-5'>接收器</b>SC5108

    433M 通訊技術(shù)無(wú)線遙控芯片CMT2300A

    433M遙控原理是通過(guò)使用433MHz頻率進(jìn)行無(wú)線通信, 將信號(hào)從發(fā)射器發(fā)送到接收器,并在
    的頭像 發(fā)表于 07-15 15:01 ?988次閱讀
    <b class='flag-5'>433</b>M 通訊技術(shù)無(wú)線遙控<b class='flag-5'>器</b>芯片CMT2300A

    433MHz頻段的LoRa通訊單元 | LoRaE220-433 Unit

    NEWLoRaE220-433UnitLoRaE220-433Unit是一款適用于433MHz頻段的LoRa通訊單元,集成了LLCC68芯片方案。相較于傳統(tǒng)的SX1278方案,LLCC
    的頭像 發(fā)表于 07-13 08:30 ?492次閱讀
    <b class='flag-5'>433MHz</b>頻段的LoRa通訊單元 | LoRaE220-<b class='flag-5'>433</b> Unit

    TL28L92 3.3V/5V雙通道通用異步接收器/發(fā)射器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《TL28L92 3.3V/5V雙通道通用異步接收器/發(fā)射器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 07-09 09:34 ?0次下載
    TL28L92 3.3V/5V雙通道通用異步<b class='flag-5'>接收器</b>/<b class='flag-5'>發(fā)射器</b>數(shù)據(jù)表

    無(wú)線模塊433MHz和2.4GHz的功能與適用性比較

    433MHz頻段無(wú)線模塊位于超高頻(UHF)范圍內(nèi),具體頻率范圍433.05~434.79MHz。這個(gè)頻段的無(wú)線電波具有較長(zhǎng)的波長(zhǎng)和較好的穿透能力,以及較遠(yuǎn)的傳輸距離,適合于低數(shù)據(jù)率的遠(yuǎn)距離傳輸和在障礙物較多的環(huán)境下使用。比如家
    的頭像 發(fā)表于 06-25 16:44 ?1357次閱讀
    無(wú)線<b class='flag-5'>模塊</b><b class='flag-5'>433MHz</b>和2.4GHz的功能與適用性比較

    自適應(yīng)433無(wú)線接收模塊

    場(chǎng)合。 三 . 產(chǎn)品概述: 本產(chǎn)品為433MHz無(wú)線接收模塊,能適用多種433遙控的信號(hào)匹配振蕩電阻。當(dāng)
    的頭像 發(fā)表于 04-08 10:20 ?984次閱讀
    自適應(yīng)<b class='flag-5'>433</b>無(wú)線<b class='flag-5'>接收</b><b class='flag-5'>模塊</b>

    藍(lán)牙發(fā)射器有什么作用,藍(lán)牙發(fā)射器接收器的區(qū)別

    藍(lán)牙發(fā)射器是一種能夠?qū)⒁纛l信號(hào)通過(guò)藍(lán)牙信號(hào)進(jìn)行無(wú)線傳輸?shù)脑O(shè)備。其主要作用是將電視、電腦、音響等設(shè)備的音頻信號(hào)傳輸?shù)蕉鷻C(jī)、音響等藍(lán)牙接收設(shè)備上,實(shí)現(xiàn)無(wú)需線纜的音頻傳輸,讓用戶(hù)更加自由地享受音頻娛樂(lè)。
    的頭像 發(fā)表于 02-10 14:41 ?6320次閱讀

    433射頻發(fā)射電路分析

    433射頻發(fā)射電路是一種常見(jiàn)的無(wú)線通信電路,用于傳輸和接收無(wú)線信號(hào)。在這篇文章中,將詳細(xì)介紹433射頻發(fā)
    的頭像 發(fā)表于 12-20 14:25 ?4428次閱讀

    意法半導(dǎo)體推出無(wú)線充電發(fā)射器接收器評(píng)估板

    中國(guó)——意法半導(dǎo)體推出基于STWLC38和STWBC86芯片的無(wú)線充電發(fā)射器接收器評(píng)估板,簡(jiǎn)化15W Qi無(wú)線充電器的開(kāi)發(fā)。
    的頭像 發(fā)表于 12-07 11:30 ?950次閱讀

    用于高頻接收器發(fā)射器的鎖相環(huán)——第一部分

    電子發(fā)燒友網(wǎng)站提供《用于高頻接收器發(fā)射器的鎖相環(huán)——第一部分.pdf》資料免費(fèi)下載
    發(fā)表于 11-23 10:32 ?0次下載
    用于高頻<b class='flag-5'>接收器</b>和<b class='flag-5'>發(fā)射器</b>的鎖相環(huán)——第一部分

    用于高頻接收器發(fā)射器的鎖相環(huán)——第2部分

    電子發(fā)燒友網(wǎng)站提供《用于高頻接收器發(fā)射器的鎖相環(huán)——第2部分.pdf》資料免費(fèi)下載
    發(fā)表于 11-23 10:31 ?0次下載
    用于高頻<b class='flag-5'>接收器</b>和<b class='flag-5'>發(fā)射器</b>的鎖相環(huán)——第2部分

    用于高頻接收器發(fā)射器的鎖相環(huán)——第三部分

    電子發(fā)燒友網(wǎng)站提供《用于高頻接收器發(fā)射器的鎖相環(huán)——第三部分.pdf》資料免費(fèi)下載
    發(fā)表于 11-23 10:18 ?0次下載
    用于高頻<b class='flag-5'>接收器</b>和<b class='flag-5'>發(fā)射器</b>的鎖相環(huán)——第三部分