OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5613|回复: 24

其实315M超再生无线模块用起来也不错

[复制链接]

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4416
金钱
4416
注册时间
2018-5-11
在线时间
922 小时
发表于 2018-7-1 17:54:04 | 显示全部楼层 |阅读模式
这两天摸了摸315MHz超再生无线发射接收模块
感觉作为简单的数据传输也不错,
首先是价格便宜,发射和接收,一对模块的价格才3元钱;
第二是接线简单,只须连接三根线,即VCC、GND和数据线;
第三是传输距离远,据说开阔地可达500多米(从输出功率上看是NRF24L01的30多倍)
第四是易于上手,没有任何协议,直接透传就行了。

既然没有任何协议,就必须自定义协议,不过,不要紧张,我们可以采取拿来主义,
直接用红外遥控的协议即可,即采取引导码、8位用户码、8位用户反码,8位键数据码、8位键数据反码的方式。

我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4416
金钱
4416
注册时间
2018-5-11
在线时间
922 小时
 楼主| 发表于 2018-7-1 18:00:38 | 显示全部楼层
本帖最后由 warship 于 2018-7-1 18:04 编辑

至于发射部分,也很容易,
可以用定时器,为了方便实现和理解,
我把直接使用延时实现的代码贴在下面:
void Send_IRByteSft(unsigned char x_irdata)
{
        unsigned char i;   //循环移位计数
        unsigned char irdata;  //数据寄存
        unsigned int endcount; //计数结束(即完成延时)

        irdata = x_irdata;
        for(i=0;i<8;i++)
        {
                //先发送0.56ms的高电平(即编码中0.56ms的低电平)

                SendLogicONE; //发送高电平0.56ms
                delay_us(565);
        
                SendLogicZERO;
               
                //先发高位,有协议是先发低位,请与接收解码程序配合
                if(irdata&0x80) //判断最高位是0还是1(0则延时(1.125ms-0.56ms=0.565ms);1则延时(2.25ms-0.56ms=1.685ms))
                {
                        endcount = 1685;          //1.685ms
                }
                else endcount = 565;          //0.565ms
    delay_us(endcount);

                irdata = irdata << 1;
        }                  
}

//发送一帧用户数据
/*******************************************************************
采用软件延时方式发送一帧用户数据
*******************************************************************/
void Transmit_IRdataSft(unsigned char p_irdata)   
{        
  unsigned char IrAddr=IR_ADDR; //(地址ID码)


        //发送9ms的引导码(高电平)
        SendLogicONE;
        delay_ms(9);

        //发送4.5ms的引导码的结束码(低电平)
        SendLogicZERO;
        delay_ms(4);
        delay_us(500);
        
        Send_IRByteSft(IrAddr);       //发送地址码
  Send_IRByteSft(~IrAddr);      //发送地址码的反码
        Send_IRByteSft(p_irdata);          //发送8位数据码
        Send_IRByteSft(~p_irdata); //发送8位数据反码
//        Send_IRByteSft(0x66);        //结束码(可用于进一步的辨别)

        
        //最后发送0.56ms的高电平
        SendLogicONE;
        delay_us(565);
        SendLogicZERO;
}        


我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 1 反对 0

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4416
金钱
4416
注册时间
2018-5-11
在线时间
922 小时
 楼主| 发表于 2018-7-1 17:58:26 | 显示全部楼层
接收部分无须自己编代码,
直接用原子的红外遥控接收的代码就行。
如果你有战舰开发板的话,直接把315M接收模块的数据输出端接在PB9就可以做实验了(与板载的红外接收头可以并存于PB9)
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4416
金钱
4416
注册时间
2018-5-11
在线时间
922 小时
 楼主| 发表于 2018-7-1 18:11:08 | 显示全部楼层
其中IR_ADDR为用户地址码,自己随便定义,SendLogicZERO和SendLogicONE分别为发送逻辑电平低、高的宏定义,
我实验时使用了PA8,注意相位问题,实际输出高电平为逻辑0,输出低电平为逻辑1
宏定义如下:

#define  IR_ADDR                        0x00    //用户地址码

//注意相位
#define SendLogicZERO                GPIO_SetBits(GPIOA,  GPIO_Pin_8)
#define SendLogicONE                GPIO_ResetBits(GPIOA,  GPIO_Pin_8)       
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4416
金钱
4416
注册时间
2018-5-11
在线时间
922 小时
 楼主| 发表于 2018-7-1 18:40:11 | 显示全部楼层
315MHz、433MHz超再生无线模块广泛用于各种无线遥控电路,
或许你自己已经用过多个了,基本上廉价的无线遥控模块拆开一看,
大多是这种东东,典型的就是单键/四键无线遥控器,红外无线报警,无线遥控灯控等,
加一块315M接收板你就可以用原子的红外遥控接收代码直接接收这类无线遥控器信号了。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4416
金钱
4416
注册时间
2018-5-11
在线时间
922 小时
 楼主| 发表于 2018-7-1 18:43:37 | 显示全部楼层
在单片机中使用这种模块,
可以传送简单控制或数据信息,
速率为10kbps以下,
因为是单频广播方式,
所以可以很方便地组成多机网络,
依靠地址码来区分不同的主机。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4416
金钱
4416
注册时间
2018-5-11
在线时间
922 小时
 楼主| 发表于 2018-7-2 20:12:48 | 显示全部楼层
市售的遥控产品为了简单一般使用PT2262等芯片进行发射器的数据编码,
用STM32来编码,则可直接采用软件解码
而作为发射时,用软件编码可以达到PT2262同样的效果,自由度更大。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4416
金钱
4416
注册时间
2018-5-11
在线时间
922 小时
 楼主| 发表于 2018-7-3 18:37:19 | 显示全部楼层
433M的模块除了频率不同外,
和315M是完全一样的。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

1

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2013-4-10
在线时间
7 小时
发表于 2018-7-3 20:59:33 | 显示全部楼层
学习下,直接把315接上去就行吗,红外和315的编码格式不太一样吧
回复 支持 反对

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4416
金钱
4416
注册时间
2018-5-11
在线时间
922 小时
 楼主| 发表于 2018-7-3 21:05:35 | 显示全部楼层
lunring 发表于 2018-7-3 20:59
学习下,直接把315接上去就行吗,红外和315的编码格式不太一样吧

315M,
那种3元钱一对的,
没有任何编码格式的。

它只是一个透传,
也就是你在发射端输入什么数据,
就可以在接收端收到什么数据。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4416
金钱
4416
注册时间
2018-5-11
在线时间
922 小时
 楼主| 发表于 2018-7-3 21:11:59 | 显示全部楼层
发射端如果用我贴的代码进行传送,
接收端直接用原子的红外接收代码接收就可以解码了。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

1

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2013-4-10
在线时间
7 小时
发表于 2018-7-3 21:12:02 | 显示全部楼层
明天我试下,现在手边没东西
回复 支持 反对

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4416
金钱
4416
注册时间
2018-5-11
在线时间
922 小时
 楼主| 发表于 2018-7-3 21:21:11 | 显示全部楼层
本帖最后由 warship 于 2018-7-3 21:47 编辑

其实315M不用学习任何协议,
自由度很大,
我编的发射代码就是为了直接使用原子的红外遥控接收的。

接线很简单:
发射端:发射模块的数据输入端随便接一个STM32的输出端口,我的代码是用了PA8
             模块的VCC接+5V,还有地。
接收端:接收模块的数据输出端接PB9,原子的红外接收头也接在了PB9,互不干涉的。
              模块的VCC接+5V,还有地
对了,另外,模块还要接天线,23CM长的导线就行了。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

7

主题

53

帖子

0

精华

高级会员

Rank: 4

积分
765
金钱
765
注册时间
2018-4-13
在线时间
231 小时
发表于 2018-7-4 08:55:02 | 显示全部楼层
你好 请问一下试过直接接串口TX 发送嘛  这样红外解码后直接可以接到RX,不知道这样误码率大不大
回复 支持 反对

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4416
金钱
4416
注册时间
2018-5-11
在线时间
922 小时
 楼主| 发表于 2018-7-4 09:05:44 | 显示全部楼层
dyhfaily 发表于 2018-7-4 08:55
你好 请问一下试过直接接串口TX 发送嘛  这样红外解码后直接可以接到RX,不知道这样误码率大不大

红外和315M是两种互不相干的东西,我说的是借用红外编码的协议来作为315M的协议,接收时必须用相应的315M接收模块
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

7

主题

53

帖子

0

精华

高级会员

Rank: 4

积分
765
金钱
765
注册时间
2018-4-13
在线时间
231 小时
发表于 2018-7-4 09:31:24 | 显示全部楼层
warship 发表于 2018-7-4 09:05
红外和315M是两种互不相干的东西,我说的是借用红外编码的协议来作为315M的协议,接收时必须用相应的315M ...

我知道你说的意思,我说错了一个地方,那个红外解码我说错了。我的意思是直接使用串口作为发送和接收源,不使用红外的NEC编码。那个红外解码我想打的是红外解调,但你用的超再生模块,估计和解调作用差不多。
回复 支持 反对

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4416
金钱
4416
注册时间
2018-5-11
在线时间
922 小时
 楼主| 发表于 2018-7-4 10:34:35 | 显示全部楼层
本帖最后由 warship 于 2018-7-4 12:59 编辑
dyhfaily 发表于 2018-7-4 09:31
我知道你说的意思,我说错了一个地方,那个红外解码我说错了。我的意思是直接使用串口作为发送和接收源, ...

直接接串口是可以的,不过无线传输中的误码是难免的,所以一定要自己定义一套协议。另外,315M模块的速率不能高于10kbps
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4416
金钱
4416
注册时间
2018-5-11
在线时间
922 小时
 楼主| 发表于 2018-7-4 10:42:40 | 显示全部楼层
dyhfaily 发表于 2018-7-4 09:31
我知道你说的意思,我说错了一个地方,那个红外解码我说错了。我的意思是直接使用串口作为发送和接收源, ...

另外要提醒的是,串口是全双工的,这个模块是单向的,要双向必须使用两对,并且收发分时,否则自己就干扰了。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

1

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2013-4-10
在线时间
7 小时
发表于 2018-7-4 11:16:57 | 显示全部楼层
请教一下,315的接收模块4个引脚,除了电源 地 data 另外一个是什么啊,接到哪里呢
回复 支持 反对

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-7-4 11:58:10 | 显示全部楼层
lunring 发表于 2018-7-4 11:16
请教一下,315的接收模块4个引脚,除了电源 地 data 另外一个是什么啊,接到哪里呢

两个data是导通的,你看下就知道了
回复 支持 反对

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4416
金钱
4416
注册时间
2018-5-11
在线时间
922 小时
 楼主| 发表于 2018-7-4 12:57:13 | 显示全部楼层
lunring 发表于 2018-7-4 11:16
请教一下,315的接收模块4个引脚,除了电源 地 data 另外一个是什么啊,接到哪里呢

楼上说得对,中间的两个都是data,
,随便接一个就行了
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

7

主题

53

帖子

0

精华

高级会员

Rank: 4

积分
765
金钱
765
注册时间
2018-4-13
在线时间
231 小时
发表于 2018-7-4 13:21:57 | 显示全部楼层
warship 发表于 2018-7-4 10:42
另外要提醒的是,串口是全双工的,这个模块是单向的,要双向必须使用两对,并且收发分时,否则自己就干扰 ...

串口传数据的时候只有一根线在工作啊,这个不碍事,你这个不就是一个发一个收么,串口只用其中一根线呗。
回复 支持 反对

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4416
金钱
4416
注册时间
2018-5-11
在线时间
922 小时
 楼主| 发表于 2018-7-4 19:30:51 | 显示全部楼层
dyhfaily 发表于 2018-7-4 13:21
串口传数据的时候只有一根线在工作啊,这个不碍事,你这个不就是一个发一个收么,串口只用其中一根线呗。

如果你只用串口的单向功能,
那就只用一对收发模块就行了。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4416
金钱
4416
注册时间
2018-5-11
在线时间
922 小时
 楼主| 发表于 2024-10-29 20:06:31 | 显示全部楼层
找433M的资料,
不料找到了自己多年前发的东西,
顶一下吧。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4416
金钱
4416
注册时间
2018-5-11
在线时间
922 小时
 楼主| 发表于 2024-11-3 14:20:14 | 显示全部楼层
433M和315M用起来一样,
只是载波不同而已。
前几天发现,
好多门铃都用的是433M。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 05:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表