物聯網學習,每日一考一練!
物聯網學習,每日一考一練:考試不是目的,學習知識才是重點!
完成以下答題能掌握的知識點:
物聯網的基本概念
單片機IO口基本配置
Zigbee中函數傳參
Zigbee 函數調用
中斷函數使用
ZigBee 無線傳感網組網
1、下面哪一項不屬于物聯網關鍵技術?
A.ZigBee技術 B. RFID C.低功耗藍牙技術 D.收音機
2、我國提出發展中國的物聯網的口號是?
A.智慧地球 B.感知中國 C.U-CHINA D.認知中國
3、非接觸式自動識別技術是
A.ZigBee B. M2M C.RFID D.NFC
4、智慧地球(Smarter Planet)是誰最先提出的( )
A.無錫研究院 B.溫總理 C. IBM D. 奧巴馬
5、物聯網的英文名字是(), 簡稱();
6、()是物聯網采集信息的終端工具;
7、()與IPv4協議相比和物聯網的聯系更廣泛;
8、ZigBee節點所屬類別有3種,包括:()、()、()。
1.基礎實驗,我們常需要對IO口進行配置,點亮LED1?
/************************************* 描述:點亮LED1 IO口:LED1-P1.0 點亮:低電平點亮 **************************************/ #include <ioCC2530.h> #define LED1 ? //定義P10口為LED1控制端 void IO_Init(void) { P1SEL &=~0x01; //作為普通IO口 P1DIR |= ? ; //P1_0定義為輸出 P1INP &=~0X01; //打開上拉 } void main(void) { IO_Init(); //調用初始化程序 LED1= ? ; //點亮LED1 while(1); }
請在上面#define LED1 ? 和 LED1= ? ; //點亮LED1 2處 補充完代碼
2. ZigBee數據發送
ZigBee 常用數據發送函數定義如下:
afStatus_t AF_DataRequest( afAddrType_t *dstAddr, endPointDesc_t *srcEP, uint16 cID, uint16 len, uint8 *buf, uint8 *transID, uint8 options, uint8 radius )
請參考上面代碼將下面空格補充完整,實現將數據 data 發送出去。
Void SampleApp _SendPeriodicMessage ( void ) { uint8 data[10]={0,1,2,3,4,5,6,7,8,9}; if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc, SAMPLEAPP_PERIODIC_CLUSTERID, , , &SampleApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ) { } else { // Error occurred in request to send. }
3.編程使節點 1 的 LED1 指示燈復位后閃爍 4 次,閃爍周期為 200ms,即亮 100ms,滅 100ms;可以調用 z-stack 的 LED 閃爍函數:函數如下:
void HalLedBlink (uint8 leds, uint8 numBlinks, uint8 percent, uint16 period) { #if (defined (BLINK_LEDS)) && (HAL_LED == TRUE) uint8 led; HalLedControl_t *sts; if (leds && percent && period) { if (percent < 100) { led = HAL_LED_1; leds &= HAL_LED_ALL; sts = HalLedStatusControl.HalLedControlTable; while (leds) { if (leds & led) { /* Store the current state of the led before going to blinking */ preBlinkState |= (led & HalLedState); sts->mode = HAL_LED_MODE_OFF; /* Stop previous blink */ sts->time = period; /* Time for one on/off cycle */ sts->onPct = percent; /* % of cycle LED is on */ sts->todo = numBlinks; /* Number of blink cycles */ if (!numBlinks) sts->mode |= HAL_LED_MODE_FLASH; /* Continuous */ sts->next = osal_GetSystemClock(); /* Start now */ sts->mode |= HAL_LED_MODE_BLINK; /* Enable blinking */ leds ^= led; } led <<= 1; sts++; } osal_set_event (Hal_TaskID, HAL_LED_BLINK_EVENT); } else { HalLedSet (leds, HAL_LED_MODE_ON); /* >= 100%, turn on */ } } else { HalLedSet (leds, HAL_LED_MODE_OFF); /* No on time, turn off */ } #elif (HAL_LED == TRUE) percent = (leds & HalLedState) ? HAL_LED_MODE_OFF : HAL_LED_MODE_ON; HalLedOnOff (leds, percent); /* Toggle */ #else // HAL LED is disabled, suppress unused argument warnings (void) leds; (void) numBlinks; (void) percent; (void) period; #endif /* BLINK_LEDS && HAL_LED */ }
按題目要求調用函數:(?)
4.編程使節點1的按鍵S1每按一次,控制LED1燈閃爍一次。
閃爍函數定義:
/***************************************************************************************************
* @fn HalLedSet
*
* @brief Tun ON/OFF/TOGGLE given LEDs
*
* @param leds - HAL_LED_1,HAL_LED_2;
* mode - BLINK, FLASH, TOGGLE, ON, OFF
* @return None
***************************************************************************************************/
uint8 HalLedSet (uint8 leds, uint8 mode);
按鍵中斷函數:
void SampleApp_HandleKeys( uint8 shift, uint8 keys )
{
(void)shift; // Intentionally unreferenced parameter
if ( keys & HAL_KEY_SW_6 )
{
HalUARTWrite(0,"K1 ",3); //提示KEY1被按下
? ; // LED1閃一下
}
if ( keys & HAL_KEY_SW_1 )
{
/* This key sends the Flash Command is sent to Group 1.
* This device will not receive the Flash Command from this
* device (even if it belongs to group 1).
*/
SampleApp_SendFlashMessage( SAMPLEAPP_FLASH_DURATION );
}
if ( keys & HAL_KEY_SW_2 )
{
/* The Flashr Command is sent to Group 1.
* This key toggles this device in and out of group 1.
* If this device doesn't belong to group 1, this application
* will not receive the Flash command sent to group 1.
*/
aps_Group_t *grp;
grp = aps_FindGroup( SAMPLEAPP_ENDPOINT, SAMPLEAPP_FLASH_GROUP );
if ( grp )
{
// Remove from the group
aps_RemoveGroup( SAMPLEAPP_ENDPOINT, SAMPLEAPP_FLASH_GROUP );
}
else
{
// Add to the flash group
aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );
}
}
}
請完善以上中斷函數的調用。
打開工程文件 3.1。節點 1 作為協調器,節點 2 作為終端設備且連接溫度傳
感器 DS18B20,通過周期性讀取溫度信息發送給協調器。協調器將收集到的溫度
信息通過串口 0 發送到 PC 機,并使用串口調試助手打印出來。
要求: 寫出下列要求對應的函數或代碼,在考試套件上實現題目功能:試卷共 6 頁 第 6 頁
(1) 配置串口波特率為 115200bps,關閉串口流控;
#define MT_UART_DEFAULT_BAUDRATE #define MT_UART_DEFAULT_OVERFLOW
(2) 將采集到的溫度信息發送給協調器的發送函數;
void SampleApp_SendPointToPointMessage( void ) { uint8 T[2];//溫度 //16 進制轉換成 ASCII 碼 溫度十位 //16 進制轉換成 ASCII 碼 溫度個位 if ( AF_DataRequest( &Point_To_Point_DstAddr, &SampleApp_epDesc, SAMPLEAPP_POINT_TO_POINT_CLUSTERID, 2, T, &SampleApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ) { } else { // Error occurred in request to send. } }
(3) 協調器將接收到的溫度信息通過串口 0 打印出來。
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) { uint16 flashTime; switch ( pkt->clusterId ) { case SAMPLEAPP_POINT_TO_POINT_CLUSTERID: HalUARTWrite(0,"Temp is:",8); //串口提示接收到數據 ; //溫度信息通過串口 0 發給 PC 機 HalUARTWrite(0,"\n",1); // 回車換行 break; } }
物聯網學習,每日一考一練!
搜浪信息科技發展(上海)有限公司 備案號:滬ICP備17005676號