聚豐項目 > 基于NUCLEO-F401RE的zigbee智能網關
ZigBee協議與互聯網中所使用的TCP/IP協議并不兼容,要想把ZigBee網絡接入到基于IP的互聯網,就需要一個設備來完成兩個異構網絡間數據的轉發。因此,提出了網關的概念,由網關來完成兩個異構網絡之間數據的轉發。本文使用STM32 Nucleo F401RE評估板、EMW3080 Wi-Fi網絡模塊、CC2530 ZigBee模塊,設計了一種嵌入式網關的解決方案。網關工作在兩個異構的網絡之間,連接著無線傳感網絡和互聯網,其功能包括異構網絡之間的數據轉發和對ZigBee網絡的管理。
大雨淅淅
分享大雨淅淅
團隊成員
嚴敏 軟件工程師
張影影 隊長
硬件主要由STM32 Nucleo F401RE評估板、EMW3080 Wi-Fi網絡模塊、基于CC2530的ZigBee模塊構成,并配有開關量輸入和輸出電路、RS232和RS485電路。MCU是STM32F401RET6芯片;慶科EMW3080wifi模塊用于數據遠程交互,利用慶科云實現與手機進行數據傳輸;ZigBee模塊包括協調器模塊和N個終端模塊,協調器模塊與MCU通過UART進行通信,終端模塊與傳感器進行連接
1、整體功能框圖
2、 實物圖
3、 接線圖
串行通訊直接采用TTL方式,EMW3080模塊與STM32F401RE接線如下:
(1)STM32F401RE USART1_TX接EMW3080 USART0_RX
(2)STM32F401REUSART1_RX接EMW3080 USART0_TX
CC2530模塊與STM32F401RE接線如下:
(1)STM32F401REUSART6_TX接EMW3080 USART0_RX
(2)STM32F401REUSART6_RX接EMW3080 USART0_TX
4、核心板
5、WiFi模塊
6、ZigBee模塊
7、溫濕傳感器DHT11
DHT12數字式溫濕度傳感器是一款含有己校準數字信號輸出的溫濕度復合型傳感器。它應用專用的數字模塊采集技術和半導體溫濕度傳感器,確保產品具有較高的可靠性與卓越的長期穩定性。
1、STM32F401RET6主控部分軟件設計
(1)運行平臺:在線ARM mbed os
(2)CubeMX初始化串口USART1、USART6
隨后選擇芯片,并完成I/O口的初始化操作:
設置完成后點擊生成代碼按鈕,可以完成代碼的生成,并可以繼續在Keil中編輯。
(1)主要程序代碼
Serial wifi_uart(PA_9, PA_10);
Serial zigbee_uart(PC_6, PC_7);
Serial PC(USBTX, USBRX);
DigitalOut myled(LED1);
DigitalOut zigbee_uart_E(D7); //zigbee_uart
char s[1024];
void callback() //The zigbee_uart Receive interrupt handler function
{
zigbee_uart.scanf("%s",s);
wifi_uart.printf("AT+CIPSEND=2,5\r");
wait(1);
wifi_uart.printf("%s\r\n",s);
}
void init_wifi()
{
wifi_uart.printf("AT+WJAP=TP_LINK,12345678\r");
wait(1);
wifi_uart.printf("AT+CIPSTART=2,udp_broadcast,172.16.55.255,8080,4001\r");
wait(1);
}
int main(void)
{
wifi_uart.baud(115200);
zigbee_uart.baud(115200);
init_wifi();
while(1)
{
zigbee_uart.attach(&callback);
zigbee_uart_E = 0; //receive
myled = !myled;
wait(5);
}
}
電腦連接wifi(“TP_LINK”),打開網絡調試助手,可以接收到WIFI模塊發出的zigbee模塊手機的溫濕信息,如下圖:
2、zigee(CC2530)模塊部分軟件設計
(1) 程序編譯平臺:IAR
(2) 主要程序代碼
void DHT11(void) //溫濕傳感啟動
{
DATA_PIN=0;
Delay_ms(19); //>18MS
DATA_PIN=1;
P0DIR &= ~0x80; //重新配置IO口方向
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
if(!DATA_PIN)
{
ucharFLAG=2;
while((!DATA_PIN)&&ucharFLAG++);
ucharFLAG=2;
while((DATA_PIN)&&ucharFLAG++);
COM();
ucharRH_data_H_temp=ucharcomdata;
COM();
ucharRH_data_L_temp=ucharcomdata;
COM();
ucharT_data_H_temp=ucharcomdata;
COM();
ucharT_data_L_temp=ucharcomdata;
COM();
ucharcheckdata_temp=ucharcomdata;
DATA_PIN=1;
uchartemp=(ucharT_data_H_temp+ucharT_data_L_temp+ucharRH_data_H_temp+ucharRH_data_L_temp);
if(uchartemp==ucharcheckdata_temp)
{
ucharRH_data_H=ucharRH_data_H_temp;
ucharRH_data_L=ucharRH_data_L_temp;
ucharT_data_H=ucharT_data_H_temp;
ucharT_data_L=ucharT_data_L_temp;
ucharcheckdata=ucharcheckdata_temp;
}
wendu_shi=ucharT_data_H/10;
wendu_ge=ucharT_data_H%10;
shidu_shi=ucharRH_data_H/10;
shidu_ge=ucharRH_data_H%10;
}
else //沒用成功讀取,返回0
{
wendu_shi=0;
wendu_ge=0;
shidu_shi=0;
shidu_ge=0;
}
P0DIR |= 0x80; //IO口需要重新配置
}
//獲取溫濕度發送
void SampleApp_Send_P2P_Message( void )
{
byte i, temp[3], humidity[3], strTemp[7];
DHT11(); //獲取溫濕度
//將溫濕度的轉換成字符串,供LCD顯示
temp[0] = wendu_shi+0x30;
temp[1] = wendu_ge+0x30;
temp[2] = '\0';
humidity[0] = shidu_shi+0x30;
humidity[1] = shidu_ge+0x30;
humidity[2] = '\0';
//將數據整合后方便發給協調器顯示
osal_memcpy(strTemp, temp, 2);
osal_memcpy(&strTemp[2], humidity, 3);
//獲得的溫濕度通過串口輸出到電腦顯示
HalUARTWrite(0, " Temperature:", 12);
HalUARTWrite(0, strTemp, 2);
HalUARTWrite(0, " Humidity:", 9);
HalUARTWrite(0, &strTemp[2], 2);
HalUARTWrite(0, "\n",1);
if ( AF_DataRequest( &SampleApp_P2P_DstAddr, &SampleApp_epDesc,
SAMPLEAPP_P2P_CLUSTERID,
6,
strTemp,
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
}
else
{
// Error occurred in request to send.
}
}
//數據接收
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
uint16 flashTime;
switch ( pkt->clusterId )
{
case SAMPLEAPP_P2P_CLUSTERID:
HalUARTWrite(0, "T&H:", 4); //提示接收到數據
HalUARTWrite(0, pkt->cmd.Data, pkt->cmd.DataLength); //輸出接收到的數據
HalUARTWrite(0, "\n", 1); // 回車換行
break;
case SAMPLEAPP_PERIODIC_CLUSTERID:
break;
case SAMPLEAPP_FLASH_CLUSTERID:
flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] );
HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) );
break;
}
}
Zigbee串口輸出如下圖:
(9.26 MB)下載
wkp1992101: 看起來不錯,智能網關
回復