arduino使用si4432模块进行无线通讯
本帖最后由 histamine 于 2013-3-29 22:57 编辑简单介绍下,详细信息及更高级的使用方法请自己阅读rf22库的文档
使用RF22库
http://www.airspayce.com/mikem/arduino/RF22/
(该库适用的Hope-RF RF22B模块其实就是si4432模块)
si4432与5v arduino通讯需要用一块cd4050进行电平转换
硬件连接原理图:
面包板连接示意图:
实际演示需要两块si4432模块和两块arduino uno开发板:
两块arduino uno分别烧入以下代码(即RF22库自带的client/server example中):
client:// rf22_client.pde
// -*- mode: C++ -*-
// Example sketch showing how to create a simple messageing client
// with the RF22 class. RF22 class does not provide for addressing or reliability.
// It is designed to work with the other example rf22_server
#include <SPI.h>
#include <RF22.h>
// Singleton instance of the radio
RF22 rf22;
void setup()
{
Serial.begin(9600);
if (!rf22.init())
Serial.println("RF22 init failed");
// Defaults after init are 434.0MHz, 0.05MHz AFC pull-in, modulation FSK_Rb2_4Fd36
}
void loop()
{
while (1)
{
Serial.println("Sending to rf22_server");
// Send a message to rf22_server
uint8_t data[] = "Hello World!";
rf22.send(data, sizeof(data));
rf22.waitPacketSent();
// Now wait for a reply
uint8_t buf;
uint8_t len = sizeof(buf);
if (rf22.waitAvailableTimeout(500))
{
// Should be a message for us now
if (rf22.recv(buf, &len))
{
Serial.print("got reply: ");
Serial.println((char*)buf);
}
else
{
Serial.println("recv failed");
}
}
else
{
Serial.println("No reply, is rf22_server running?");
}
}
}server:// rf22_server.pde
// -*- mode: C++ -*-
// Example sketch showing how to create a simple messageing server
// with the RF22 class. RF22 class does not provide for addressing or reliability.
// It is designed to work with the other example rf22_client
#include <SPI.h>
#include <RF22.h>
// Singleton instance of the radio
RF22 rf22;
void setup()
{
Serial.begin(9600);
if (!rf22.init())
Serial.println("RF22 init failed");
// Defaults after init are 434.0MHz, 0.05MHz AFC pull-in, modulation FSK_Rb2_4Fd36
}
void loop()
{
while (1)
{
rf22.waitAvailable();
// Should be a message for us now
uint8_t buf;
uint8_t len = sizeof(buf);
if (rf22.recv(buf, &len))
{
Serial.print("got request: ");
Serial.println((char*)buf);
// Send a reply
uint8_t data[] = "And hello back to you";
rf22.send(data, sizeof(data));
rf22.waitPacketSent();
Serial.println("Sent a reply");
}
else
{
Serial.println("recv failed");
}
}
}通过串口输出,即可看到两块arduino uno正在通过si4432模块进行通讯:
再补充几句:
一块arduino uno其实可以同时接两块si4432模块,这两个模块的nSEL引脚要连接到arduino不同的引脚上,nIRQ引脚分别连接到arduino的D2(interrupt 0)和D3(interrupt 1),然后初始化RF22对象时需要手动指定slaveSelectPin和interrupt两个参数
RF22库还支持组网功能,见RF22Mesh和RF22Router两个类的文档 感谢楼主共享~~回头来试试看~ 这个好。似乎si4432的arduino 范例或者文档挺少的 还要电平转换啊 请问楼主
si4432的SDN脚接到 CD4049 的 J=D 转 D 然后接到哪里了?
图上是接到了arduino的GND? 本帖最后由 histamine 于 2013-4-2 14:04 编辑
gaotian 发表于 2013-4-2 11:09 static/image/common/back.gif
请问楼主
si4432的SDN脚接到 CD4049 的 J=D 转 D 然后接到哪里了?
图上是接到了arduino的GND?
我是直接接到了gnd上面,如果接到arduino的io上面的话,输出高电平可以让si4432模块停止工作,进入关闭状态;输出低电平进入工作状态
通过控制sdn脚的电平,还可以对si4432模块进行复位 RF22这个库在哪里定义接收端和发送端的地址啊? 5V的SI4432模块还需要转换电平吗?
ardyPro 发表于 2013-4-26 13:14 static/image/common/back.gif
5V的SI4432模块还需要转换电平吗?
自带电平转换电路就不用了
如果只是自带一个5v电源转3v3稳压IC,还是要电平转换的 自发自收如何做?
同一arduino上的两块SI4432模块可以同时被选用吗? 本帖最后由 histamine 于 2013-5-2 12:42 编辑
ardyPro 发表于 2013-5-2 12:16 static/image/common/back.gif
自发自收如何做?
同一arduino上的两块SI4432模块可以同时被选用吗?
RF22 (uint8_t slaveSelectPin=SS, uint8_t interrupt=0, GenericSPIClass *spi=&Hardware_spi)
创建RF22对象实例的时候,分别指定一下slaveSelectPin和interrupt就行了
arduino uno只有两个外部中断,所以最多只能同时接两个si4432模块 SDO接口不需要转电平的吗?这个是不是说SDO是输出0或3.3V,对于Arduino来说3.3V也高电平,所以就不用转了?是这个意思吗? 没有4050程序上还以代替吗? 错咯!我给arduino供3.3V的电就可以不用4050了吧 怎么看引脚啊?有没有标示?
页:
[1]
2