- void HAL_UART_RxCpltCallback(UART_HandleTypeDef*UartHandle)
- {
- if(UartHandle->Instance == USART2)
- {
- gizPutData((uint8_t *)&aRxBuffer, 1);
- HAL_UART_Receive_IT(&huart2, (uint8_t *)&aRxBuffer, 1);//开启下一次接收中断
- }
- }
串口发送数据写入环形缓存接口接口:
- int32_t uartWrite(uint8_t *buf, uint32_t len)
- {
- uint8_t crc[1] = {0x55};
- uint32_t i = 0;
-
- if(NULL == buf)
- {
- return -1;
- }
- for(i=0; i<len; i++)
- {
- HAL_UART_Transmit_IT(&huart2, (uint8_t *)&buf[i], 1);
- while (huart2.gState != HAL_UART_STATE_READY);//Loop until the end of transmission
- if(i >=2 && buf[i] == 0xFF)
- {
- HAL_UART_Transmit_IT(&huart2, (uint8_t *)&crc, 1);
- while (huart2.gState != HAL_UART_STATE_READY);//Loop until the end of transmission
- }
- }
- #ifdef PROTOCOL_DEBUG
- GIZWITS_LOG("MCU2WiFi[%4d:%4d]: ", gizGetTimerCount(), len);
- for(i=0; i<len; i++)
- {
- GIZWITS_LOG("%02x ", buf[i]);
- if(i >=2 && buf[i] == 0xFF)
- {
- GIZWITS_LOG("%02x ", 0x55);
- }
- }
- GIZWITS_LOG("\n");
- #endif
-
- return len;
- }
用户驱动初始化接口:
- void userInit(void)
- {
- memset((uint8_t*)¤tDataPoint, 0, sizeof(dataPoint_t));
- delay_init(); // 延时 初始化
- rgbLedInit(); // RGB LED 初始化
- dht11Init(); // 温湿度初始化
- irInit(); // 红外初始化
- /** Warning !!! DataPoint Variables Init , Must Within The Data Range **/
- /*
- currentDataPoint.valueLED_OnOff = ;
- currentDataPoint.valueLED_Color = ;
- currentDataPoint.valueLED_R = ;
- currentDataPoint.valueLED_G = ;
- currentDataPoint.valueLED_B = ;
- currentDataPoint.valueInfrared = ;
- currentDataPoint.valueTemperature = ;
- currentDataPoint.valueHumidity = ;
- currentDataPoint.valueDistance = ;
- currentDataPoint.valueAirQuality = ;
- currentDataPoint.valueAlert_1 = ;
- currentDataPoint.valueAlert_2 = ;
- currentDataPoint.valueFault_LED = ;
- currentDataPoint.valueFault_TemHum = ;
- currentDataPoint.valueFault_IR = ;
- */
- }
数据上报到云平台逻辑代码:
- void userHandle(void)
- {
- uint8_t ret = 0;
- static uint32_t thLastTimer = 0;
- static uint32_t thLastTimer2 = 0;
-
- if((gizGetTimerCount() - thLastTimer) > 2000)
- {
- ret = dht11Read((uint8_t *)¤tDataPoint.valueTemperature,(uint8_t *)¤tDataPoint.valueHumidity);
- if(ret != 0)
- {
- GIZWITS_LOG("Failed to read DHT11 [%d] \n", ret);
- }
- //printf("Temp=%d Hum=%d\r\n",currentDataPoint.valueTemperature,currentDataPoint.valueHumidity);
- thLastTimer = gizGetTimerCount();
- }
-
- if((gizGetTimerCount() - thLastTimer2) > 200)
- {
- currentDataPoint.valueInfrared = irHandle();
-
- if(HAL_TIM_Base_Start(&htim4)!=HAL_OK)
- {
- printf("HAL_TIM_Base_Start Error!\r\n");
- }
- HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_SET);
- delay_us(10);
- HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_RESET);
-
- while(!HAL_GPIO_ReadPin(Echo_GPIO_Port, Echo_Pin));
- v1=htim4.Instance->CNT;
- while(HAL_GPIO_ReadPin(Echo_GPIO_Port, Echo_Pin));
- v2=htim4.Instance->CNT;
- htim4.Instance->CNT=0;
- if(HAL_TIM_Base_Stop(&htim4)!=HAL_OK)
- {
- printf("HAL_TIM_Base_Stop Error!\r\n");
- }
- printf("v2=%d v1=%d\r\n",v2,v1);
- Distance=(v2-v1)*17/(float)1000;
-
- AirQuality = ((float)((float)ConvertedValue * VREF)/MAX_CONVERTED_VALUE);
- printf("distance=%0.1fcm AirQuality=%d\r\n",Distance,AirQuality);
- thLastTimer2 = gizGetTimerCount();
-
- currentDataPoint.valueDistance = Distance;
- currentDataPoint.valueAirQuality = AirQuality;
- }
- /*
- currentDataPoint.valueInfrared = ;//Add Sensor Data Collection
- currentDataPoint.valueTemperature = ;//Add Sensor Data Collection
- currentDataPoint.valueHumidity = ;//Add Sensor Data Collection
- currentDataPoint.valueDistance = ;//Add Sensor Data Collection
- currentDataPoint.valueAirQuality = ;//Add Sensor Data Collection
- currentDataPoint.valueAlert_1 = ;//Add Sensor Data Collection
- currentDataPoint.valueAlert_2 = ;//Add Sensor Data Collection
- currentDataPoint.valueFault_LED = ;//Add Sensor Data Collection
- currentDataPoint.valueFault_TemHum = ;//Add Sensor Data Collection
- currentDataPoint.valueFault_IR = ;//Add Sensor Data Collection
- */
-
- }
云平台下发控制接口代码:
- int8_t gizwitsEventProcess(eventInfo_t *info, uint8_t *gizdata, uint32_t len)
- {
- uint8_t i = 0;
- dataPoint_t *dataPointPtr = (dataPoint_t *)gizdata;
- moduleStatusInfo_t *wifiData = (moduleStatusInfo_t *)gizdata;
- protocolTime_t *ptime = (protocolTime_t *)gizdata;
-
- #if MODULE_TYPE
- gprsInfo_t *gprsInfoData = (gprsInfo_t *)gizdata;
- #else
- moduleInfo_t *ptModuleInfo = (moduleInfo_t *)gizdata;
- #endif
- if((NULL == info) || (NULL == gizdata))
- {
- return -1;
- }
- for(i=0; i<info->num; i++)
- {
- switch(info->event[i])
- {
- case EVENT_LED_OnOff:
- currentDataPoint.valueLED_OnOff = dataPointPtr->valueLED_OnOff;
- GIZWITS_LOG("Evt: EVENT_LED_OnOff %d \n", currentDataPoint.valueLED_OnOff);
- if(0x01 == currentDataPoint.valueLED_OnOff)
- {
- //user handle
- ledRgbControl(254, 0, 0);
- }
- else
- {
- //user handle
- ledRgbControl(0, 0, 0);
- }
- break;
- case EVENT_LED_Color:
- currentDataPoint.valueLED_Color = dataPointPtr->valueLED_Color;
- GIZWITS_LOG("Evt: EVENT_LED_Color %d\n", currentDataPoint.valueLED_Color);
- switch(currentDataPoint.valueLED_Color)
- {
- case LED_Color_VALUE0:
- //user handle
- ledRgbControl(currentDataPoint.valueLED_R, currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
- break;
- case LED_Color_VALUE1:
- ledRgbControl(254, 254, 0);
- break;
- case LED_Color_VALUE2:
- ledRgbControl(254, 0, 70);
- break;
- case LED_Color_VALUE3:
- ledRgbControl(238, 30, 30);
- break;
- default:
- break;
- }
- break;
- case EVENT_LED_R:
- currentDataPoint.valueLED_R = dataPointPtr->valueLED_R;
- GIZWITS_LOG("Evt:EVENT_LED_R %d\n",currentDataPoint.valueLED_R);
- //user handle
- ledRgbControl(currentDataPoint.valueLED_R, currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
- break;
- case EVENT_LED_G:
- currentDataPoint.valueLED_G = dataPointPtr->valueLED_G;
- GIZWITS_LOG("Evt:EVENT_LED_G %d\n",currentDataPoint.valueLED_G);
- //user handle
- ledRgbControl(currentDataPoint.valueLED_R, currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
- break;
- case EVENT_LED_B:
- currentDataPoint.valueLED_B = dataPointPtr->valueLED_B;
- GIZWITS_LOG("Evt:EVENT_LED_B %d\n",currentDataPoint.valueLED_B);
- //user handle
- ledRgbControl(currentDataPoint.valueLED_R, currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
- break;
- case WIFI_SOFTAP:
- break;
- case WIFI_AIRLINK:
- break;
- case WIFI_STATION:
- break;
- case WIFI_CON_ROUTER:
- ledRgbControl(0, 0, 0);
- break;
- case WIFI_DISCON_ROUTER:
- ledRgbControl(250, 0, 0);
- break;
- case WIFI_CON_M2M:
- ledRgbControl(0, 0, 0);
- break;
- case WIFI_DISCON_M2M:
- ledRgbControl(0, 0, 250);
- break;
- case WIFI_RSSI:
- GIZWITS_LOG("RSSI %d\n", wifiData->rssi);
- break;
- case TRANSPARENT_DATA:
- GIZWITS_LOG("TRANSPARENT_DATA \n");
- //user handle , Fetch data from [data] , size is [len]
- break;
- case WIFI_NTP:
- GIZWITS_LOG("WIFI_NTP : [%d-%d-%d %02d:%02d:%02d][%d] \n",ptime->year,ptime->month,ptime->day,ptime->hour,ptime->minute,ptime->second,ptime->ntp);
- break;
- case MODULE_INFO:
- GIZWITS_LOG("MODULE INFO ...\n");
- #if MODULE_TYPE
- GIZWITS_LOG("GPRS MODULE ...\n");
- //Format By gprsInfo_t
- #else
- GIZWITS_LOG("WIF MODULE ...\n");
- //Format By moduleInfo_t
- GIZWITS_LOG("moduleType : [%d] \n",ptModuleInfo->moduleType);
- #endif
- break;
- default:
- break;
- }
- }
- return 0;
- }
实现效果:
控制LED显示蓝色
控制LED显示红色
控制LED显示绿色
超声波和烟雾传感器数据采集上报效果:
总结:
机智云平台的接入还是十分简单的,基本上可以通过图形化简单的进行配置一下参数,然后生成代码包,基于代码包二次开发十分简单方便,只需要看懂从哪个入口填充上行或者下行处理代码就行;对于个人用户,目前只体验了传感器类数据接入开发,通过官网资料来看,目前还没看到音视频类设备接入方法,如果能够体验音视频类产品接入开发,可玩性增加不少。