微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > 基于Zigbee的以太网透传实验

基于Zigbee的以太网透传实验

时间:10-02 整理:3721RD 点击:


今天闲来无事,用手上的板子做了一个基于zigbee的以太网透传实验,什么都不讲了,先上图。




在图片中有两个模块,一个是zigbee模块,一个是以太网网关。做这个实验之前,我已经将zigbee做成了透传模块,所以不需要对zigbee编程,只要对其收发数据就行。主要是对以太网网关的编程,以太网模块上面主要有wifi接口和zigbee接口和以太网接口和视频接口,我这次主要是实现了将以太网模块接收到的数据通过zigbee发送出去,例外一个zigbee模块无线收到数据之后通过串口打印出来。原理图如下:



网关的主控芯片采用了ST的103芯片,以太网控制芯片则采用了W5100模块,这个模块配置容易,操作简单,对于入门上手也简单.
要实现W5100的功能,主要要实现底层的SPI的操作,代码如下:
uint8_t SPI_ReadByte(void)
{
uint8_t rByte=0;
while(!SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE));
SPI_I2S_SendData(SPI1,0);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
rByte=SPI_I2S_ReceiveData(SPI1);
return rByte;
}

void SPI_SendByte(uint8_t dt)
{
uint8_t rByte=0;
while(!SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE));
SPI_I2S_SendData(SPI1,dt);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
rByte=SPI_I2S_ReceiveData(SPI1);
}

uint8_t Read_W5100(uint16_t addr)
{
uint8_t i;
/* ÖÃW5100μÄCSÎaμíμçƽ */
GPIO_ResetBits(GPIOA, GPIO_Pin_11);
/* ·¢Ëí¶áÃüáî */
SPI_SendByte(0x0f);
/* ·¢ËíμØÖ· */
SPI_SendByte(addr/256);
SPI_SendByte(addr);
/* ¶áè¡êy¾Y */
i=SPI_ReadByte();
/* ÖÃW5100μÄCSÎa¸ßμçƽ */
GPIO_SetBits(GPIOA, GPIO_Pin_11);
return i;
}

void Write_W5100(uint16_t addr, uint8_t dat)
{
/* ÖÃW5100μÄCSÎaμíμçƽ */
GPIO_ResetBits(GPIOA, GPIO_Pin_11);
/* ·¢ËíD′Ãüáî */
SPI_SendByte(0xf0);
/* ·¢ËíμØÖ· */
SPI_SendByte(addr/256);
SPI_SendByte(addr);
/* D′èëêy¾Y */
SPI_SendByte(dat);
/* ÖÃW5100μÄCSÎa¸ßμçƽ */
GPIO_SetBits(GPIOA, GPIO_Pin_11);
}

有点乱码上传一张图片,上面的代码都是通用的,可以在任何平台移植,只需要修改下底层对SPI的操作代码。




接下来的工作主要就是对W5100初始化了,主要配置默认网关地址,MAC地址,子网掩码,网络ip地址等,实现这步之后,如果硬件连接正确,基本就可以ping通对方了如图:



如果这步没有成功,那接下来的什么TCP/IP编程就基本不用做了,没有ping通,要嘛就是硬件没有搞好,要不就是软件配置有问题,一般的话,对W5100软件复位之后需要延时个100ms左右,如果这个时间太短了,会导致配置失败。

牛逼 牛逼 佩服

这个实验,还是需要有这个硬件条件,才可以做,自己现在也在做zigbee相关的模块,用在电表上电。

现在远程抄表用的很广泛了

楼主,能把您这个基于ZigBee的以太网透传实验的工程代码发我一份么1257363662@qq.com,我现在也在做这方面的实验,一头雾水,想借您的代码研究一下,谢谢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top