收藏官网首页

【Gokit2&ZigBee&STM32】之无线工业粉尘监测仪

查看数: 46119 | 评论数: 14 | 收藏 6
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2016-8-10 13:05

正文摘要:

本帖最后由 kiasur 于 2016-8-26 14:54 编辑 手机也可实时监控无线工业粉尘,还能实现太阳能供电!!!! 原创申明:如转载请注明来源:http://club.gizwits.com/thread-3242-1-1.html 本文已参加机智云线上开源 ...

回复

kiasur 发表于 2016-8-15 13:58:31

【Gokit2&ZigBee&STM32】之无线工业粉尘监测仪

本帖最后由 kiasur 于 2016-8-15 14:27 编辑
  1. /*Gokit2代码*/
  2. #include "gokit.h"

  3. /*Global Variable*/
  4. uint32_t ReportTimeCount = 0;
  5. uint8_t gaterSensorFlag = 0;
  6. uint8_t Set_LedStatus = 0;
  7. uint8_t NetConfigureFlag = 0;
  8. uint8_t curTem = 0, curHum = 0;
  9. uint8_t lastTem = 0,lastHum = 0;

  10. extern RingBuffer u_ring_buff;
  11. uint8_t p0Flag = 0;

  12. WirteTypeDef_t        WirteTypeDef;
  13. ReadTypeDef_t        ReadTypeDef;
  14. uint8_t Rx_sensor[10]={0};//´«¸ÐÆ÷Êý¾Ý
  15. extern uint8_t zb_count;
  16. uint8_t Switch_LEDStatus = 0,Switch_WaterStatus = 0,Switch_AirStatus = 0,Switch_WaringStatus = 0;
  17. /**
  18.   * @brief  Main program.
  19.   * @param  None
  20.   * @retval None
  21.   */
  22. int main(void)
  23. {
  24.         uint8_t p0_control_buf[MAX_P0_LEN];
  25.        
  26.         SystemInit();       
  27.         HW_Init();
  28.         SW_Init();               
  29.         while(1)
  30.         {
  31.                 KEY_Handle();
  32.                 GizWits_MessageHandle(p0_control_buf, sizeof(WirteTypeDef_t));

  33.                
  34.     if(gaterSensorFlag != 0)
  35.     {
  36.       gaterSensorFlag = 0;
  37.                   Zigbee_sensorData();//获取ZigBee串口传输的数据
  38.                         GizWits_DevStatusUpgrade((uint8_t *)&ReadTypeDef, 10*60*1000, 1);//上传数据到机智云服务器
  39.     }

  40.         }
  41. }
  42. /** @addtogroup GizWits_HW_Init
  43.   * @{
  44.   */
  45. void HW_Init(void)
  46. {
  47.         Delay_Init(72);       
  48.         UARTx_Init();
  49.   RGB_KEY_GPIO_Init();
  50.         RGB_LED_Init();       
  51.         LED_GPIO_Init();       
  52.         KEY_GPIO_Init();
  53.         TIM3_Int_Init(7199,9);   //ms interrupt       
  54.         Motor_Init();       
  55.         DHT11_Init();       
  56.         IR_Init();       
  57. }
  58. /** @addtogroup GizWits_SW_Init
  59.   * @{
  60.   */
  61. void SW_Init()
  62. {

  63.         ReadTypeDef.PM1_0_H =0;
  64.         ReadTypeDef.PM1_0_L =0;
  65.         ReadTypeDef.PM2_5_H = 0;
  66.         ReadTypeDef.PM2_5_L = 0;
  67.         ReadTypeDef.PM10_H = 0;
  68.         ReadTypeDef.PM10_L = 0;
  69.         GizWits_init(sizeof(ReadTypeDef_t));
  70.         printf("hello world\r\n");
  71.         printf("Gokit Init Ok ...\r\n");
  72. }
  73. /** @addtogroup Printf_SystemRccClocks
  74.   * @{
  75.   */
  76. void Printf_SystemRccClocks(void)
  77. {
  78.         uint8_t SYSCLKSource;

  79.         RCC_ClocksTypeDef  SystemRCC_Clocks;
  80.         printf("System start...\r\n");
  81.         SYSCLKSource = RCC_GetSYSCLKSource();
  82.         if(SYSCLKSource==0x04)
  83.                 printf("SYSCLKSource is HSE\r\n");
  84.         else if(SYSCLKSource==0x00)
  85.                 printf("SYSCLKSource is HSI\r\n");
  86.         else if(SYSCLKSource==0x08)
  87.                 printf("SYSCLKSource is PL!\r\n");
  88.        
  89.         RCC_GetClocksFreq(&SystemRCC_Clocks);
  90.         printf("SYS clock =%dMHz \r\n",(uint32_t)SystemRCC_Clocks.SYSCLK_Frequency/1000000);
  91.         printf("HCLK clock =%dMHz \r\n",(uint32_t)SystemRCC_Clocks.HCLK_Frequency/1000000);
  92.         printf("PCLK1 clock =%dMHz \r\n",(uint32_t)SystemRCC_Clocks.PCLK1_Frequency/1000000);
  93.         printf("PCLK2_clock =%dMHz \r\n",(uint32_t)SystemRCC_Clocks.PCLK2_Frequency/1000000);       
  94.         printf("SADCCLK_Frequencyclock =%dMHz \r\n",(uint32_t)SystemRCC_Clocks.ADCCLK_Frequency/1000000);

  95. }

  96. /*Gokit2获取到ZigBee协调器传输的数据进行处理*/
  97. void Zigbee_sensorData(void)
  98. {
  99.         uint8_t i;
  100.         if( (Rx_sensor[0] == 0x42) && (Rx_sensor[9] == 0xFF) )//判断数据是否符合协议
  101.         {
  102.                 ReadTypeDef.PM1_0_H = Rx_sensor[2];//保存数据到结构体中
  103.                 ReadTypeDef.PM1_0_L = Rx_sensor[3];//保存数据到结构体中
  104.                 ReadTypeDef.PM2_5_H = Rx_sensor[4];//保存数据到结构体中
  105.                 ReadTypeDef.PM2_5_L = Rx_sensor[5];//保存数据到结构体中
  106.                 ReadTypeDef.PM10_H = Rx_sensor[6];//保存数据到结构体中
  107.                 ReadTypeDef.PM10_L = Rx_sensor[7];//保存数据到结构体中
  108.                 printf("%s",Rx_sensor);//打印数据,方便调试
  109.                

  110.                 for(i=0;i<10;i++)
  111.                         {
  112.                                 Rx_sensor[i] = 0;//清除数组为下一次数据保存
  113.                         }
  114.                  zb_count =0;
  115.         }
  116. }
  117. /*****************************************************
  118. * Function Name  : KEY_Handle
  119. * Description    : Key processing function
  120. * Input          : None
  121. * Output         : None
  122. * Return         : None
  123. * Attention                          : None
  124. *****************************************************/
  125. void KEY_Handle(void)
  126. {
  127.         uint8_t Key_return =0;       
  128.         Key_return = ReadKeyValue();       
  129.         if(Key_return & KEY_UP)
  130.         {
  131.                 if(Key_return & PRESS_KEY1)
  132.                 {
  133. #ifdef PROTOCOL_DEBUG
  134.                                   printf("KEY1 PRESS\r\n");
  135. #endif               
  136.                 }
  137.                 if(Key_return & PRESS_KEY2)
  138.                 {
  139. #ifdef PROTOCOL_DEBUG
  140.                         printf("KEY2 PRESS ,Soft AP mode\r\n");
  141. #endif       
  142.                         //Soft AP mode, RGB red
  143.                         LED_RGB_Control(255, 0, 0);
  144.                         GizWits_D2WConfigCmd(SoftAp_Mode);
  145.                         NetConfigureFlag = 1;
  146.                 }                               
  147.         }

  148.         if(Key_return & KEY_LONG)
  149.         {
  150.                 if(Key_return & PRESS_KEY1)
  151.                 {
  152. #ifdef PROTOCOL_DEBUG
  153.                                 printf("KEY1 PRESS LONG ,Wifi Reset\r\n");
  154. #endif                       
  155.                         GizWits_D2WResetCmd();
  156.                 }
  157.                 if(Key_return & PRESS_KEY2)
  158.                 {
  159.                         //AirLink mode, RGB Green
  160. #ifdef PROTOCOL_DEBUG
  161.                                 printf("KEY2 PRESS LONG ,AirLink mode\r\n");
  162. #endif       
  163.                         LED_RGB_Control(0, 128, 0);
  164.                         GizWits_D2WConfigCmd(AirLink_Mode);
  165.                         NetConfigureFlag = 1;
  166.                 }
  167.         }
  168. }
  169. /*****************************************************
  170. * Function Name  : GizWits_WiFiStatueHandle
  171. * Description    : Callback function , Judge Wifi statue
  172. * Input          : None
  173. * Output         : None
  174. * Return         : Bit , Attr_Flags
  175. * Attention                 :
  176. *****************************************************/
  177. void GizWits_WiFiStatueHandle(uint16_t wifiStatue)
  178. {       
  179.         if(((wifiStatue & Wifi_ConnClouds) == Wifi_ConnClouds) && (NetConfigureFlag == 1))
  180.         {
  181.                 printf("W2M->Wifi_ConnClouds\r\n");
  182.                 NetConfigureFlag = 0;
  183.                 LED_RGB_Control(0,0,0);
  184.         }
  185. }
  186. /************* (C) COPYRIGHT 2011 STMicroelectronics ****END OF FILE***/
复制代码

点评

学习了,学习了  详情 回复 发表于 2020-5-1 08:08
爱学习的小李子 发表于 2020-5-1 08:08:36

学习了,学习了
sany123 发表于 2018-10-22 16:39:42
感谢楼主分享,学习,学习。。。
kiasur 发表于 2016-8-31 15:09:26
飞翔中的语言 发表于 2016-8-29 20:59
楼主,关于zigbee跟gokit2如何实现连接可否等你有空给我们小白们弄个简单的教程贴,感激不尽! ...

Gokit2与ZigBee连接需要将Gokit2进行改造,改装方法帖子上 图5 Gokit2串口跳线改装,这样做Gokit2既能下载程序,串口也能外接使用。
Gokt2的TX/PA9连接ZigBee的RX/P0.2,Gokt2的RX/PA10连接ZigBee的TX/P03。
注意:下载程序时需要将Gokit2的原本的跳线帽插上,待下载完成后再讲跳线帽拔出连接ZigBee.
飞翔中的语言 发表于 2016-8-29 20:59:04
楼主,关于zigbee跟gokit2如何实现连接可否等你有空给我们小白们弄个简单的教程贴,感激不尽!
kiasur 发表于 2016-8-17 20:15:33
作品已上传,希望各位小伙们指教不足之处,谢谢啦!
kiasur 发表于 2016-8-16 13:47:26
本帖最后由 kiasur 于 2016-8-16 13:48 编辑
努力的人 发表于 2016-8-15 22:13
我感觉哥们你可以简化一下这个系统,因为机智云有引出AD采样接口和普通IO,传感器可以直接用机智云底板的ST ...

WiFi做不了低功耗,并且WiFi不能组网,用ZigBee组网可以对工厂的各个车间进行监测,汇总数据,然后用WiFi传输到机智云。机智云最核心的还是使用它的串口做应用。底板的32引脚寥寥无几,做扩展也不太够用。
努力的人 发表于 2016-8-15 22:13:19
我感觉哥们你可以简化一下这个系统,因为机智云有引出AD采样接口和普通IO,传感器可以直接用机智云底板的STM32处理,只将机智云作为串口设备转接一下,意义不太大。使用了WIFI其实ZIGBEE就可以省了。优化一下,让机智云尽量参加系统中
kiasur 发表于 2016-8-15 13:58:14

【Gokit2&ZigBee&STM32】之无线工业粉尘监测仪

本帖最后由 kiasur 于 2016-8-15 14:15 编辑
  1. /*ZigBee用户函数代码*/
  2. #include "OSAL.h"
  3. #include "ZGlobals.h"
  4. #include "AF.h"
  5. #include "aps_groups.h"
  6. #include "ZDApp.h"

  7. #include "SampleApp.h"
  8. #include "SampleAppHw.h"

  9. #include "OnBoard.h"

  10. /* HAL */
  11. #include "hal_lcd.h"
  12. #include "hal_led.h"
  13. #include "hal_key.h"
  14. #include "MT_UART.h"
  15. #include "MT.h"//消息命令ID定义头文件
  16. #include "string.h"
  17. #include "hal_voice.h"

  18. const cId_t SampleApp_ClusterList[SAMPLEAPP_MAX_CLUSTERS] =
  19. {
  20.   SAMPLEAPP_PERIODIC_CLUSTERID,//广播簇ID
  21.   SAMPLEAPP_FLASH_CLUSTERID
  22. };

  23. const SimpleDescriptionFormat_t SampleApp_SimpleDesc =
  24. {
  25.   SAMPLEAPP_ENDPOINT,              //  int Endpoint;
  26.   SAMPLEAPP_PROFID,                //  uint16 AppProfId[2];
  27.   SAMPLEAPP_DEVICEID,              //  uint16 AppDeviceId[2];
  28.   SAMPLEAPP_DEVICE_VERSION,        //  int   AppDevVer:4;
  29.   SAMPLEAPP_FLAGS,                 //  int   AppFlags:4;
  30.   SAMPLEAPP_MAX_CLUSTERS,          //  uint8  AppNumInClusters;
  31.   (cId_t *)SampleApp_ClusterList,  //  uint8 *pAppInClusterList;
  32.   SAMPLEAPP_MAX_CLUSTERS,          //  uint8  AppNumInClusters;
  33.   (cId_t *)SampleApp_ClusterList   //  uint8 *pAppInClusterList;
  34. };

  35. endPointDesc_t SampleApp_epDesc;


  36. uint8 SampleApp_TaskID;   // Task ID for internal task/event processing
  37. // This variable will be received when
  38. // SampleApp_Init() is called.
  39. devStates_t SampleApp_NwkState;

  40. uint8 SampleApp_TransID;  // This is the unique message ID (counter)

  41. afAddrType_t SampleApp_Periodic_DstAddr;//广播afAddrType_t类型数据
  42. afAddrType_t SampleApp_Flash_DstAddr;
  43. afAddrType_t Point_To_Point_DstAddr;

  44. aps_Group_t SampleApp_Group;

  45. uint8 SampleAppPeriodicCounter = 0;
  46. uint8 SampleAppFlashCounter = 0;

  47. /**********************************************
  48. * LOCAL FUNCTIONS
  49. */
  50. void SampleApp_HandleKeys( uint8 shift, uint8 keys );
  51. void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pckt );
  52. void SampleApp_SendPointToPointMessage( uint8 *dat ) ;//点对点传播
  53. void SampleApp_SerialCMD(mtOSALSerialData_t *cmdMsg);//数据接收处理
  54. /**********************************************
  55. * NETWORK LAYER CALLBACKS
  56. */

  57. /**********************************************
  58. * PUBLIC FUNCTIONS
  59. */

  60. /**********************************************
  61. * @fn      SampleApp_Init
  62. *
  63. * @brief   Initialization function for the Generic App Task.
  64. *          This is called during initialization and should contain
  65. *          any application specific initialization (ie. hardware
  66. *          initialization/setup, table initialization, power up
  67. *          notificaiton ... ).
  68. *
  69. * @param   task_id - the ID assigned by OSAL.  This ID should be
  70. *                    used to send messages and set timers.
  71. *
  72. * @return  none
  73. */
  74. void SampleApp_Init( uint8 task_id )
  75. {
  76.   SampleApp_TaskID = task_id;
  77.   SampleApp_NwkState = DEV_INIT;
  78.   SampleApp_TransID = 0;
  79.   
  80.   /********串口初始化************/
  81.   MT_UartInit();
  82.   MT_UartRegisterTaskID(SampleApp_TaskID);
  83.   HalUARTWrite(0,"uart init success\n" ,18);  
  84.   /**************************/
  85.   
  86.   //  uint8 vol[11]={0xfd,0x00,0x08,0x01,0x01,0x5b,0x76,0x30,0x31,0x5d,0x84};
  87.   //  HalUARTWrite(1,vol,11);//减小音量
  88.   
  89.   
  90. #if defined ( BUILD_ALL_DEVICES )
  91.   // The "Demo" target is setup to have BUILD_ALL_DEVICES and HOLD_AUTO_START
  92.   // We are looking at a jumper (defined in SampleAppHw.c) to be jumpered
  93.   // together - if they are - we will start up a coordinator. Otherwise,
  94.   // the device will start as a router.
  95.   if ( readCoordinatorJumper() )
  96.     zgDeviceLogicalType = ZG_DEVICETYPE_COORDINATOR;
  97.   else
  98.     zgDeviceLogicalType = ZG_DEVICETYPE_ROUTER;
  99. #endif // BUILD_ALL_DEVICES
  100.   
  101. #if defined ( HOLD_AUTO_START )
  102.   // HOLD_AUTO_START is a compile option that will surpress ZDApp
  103.   //  from starting the device and wait for the application to
  104.   //  start the device.
  105.   ZDOInitDevice(0);
  106. #endif
  107.   
  108.   
  109.   //Setup for the Point To Point destination address
  110.   Point_To_Point_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;//点对点短地址
  111.   Point_To_Point_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;
  112.   Point_To_Point_DstAddr.addr.shortAddr = 0x0000; //协调器地址
  113.   
  114.   // Fill out the endpoint description.
  115.   SampleApp_epDesc.endPoint = SAMPLEAPP_ENDPOINT;
  116.   SampleApp_epDesc.task_id = &SampleApp_TaskID;
  117.   SampleApp_epDesc.simpleDesc
  118.     = (SimpleDescriptionFormat_t *)&SampleApp_SimpleDesc;
  119.   SampleApp_epDesc.latencyReq = noLatencyReqs;
  120.   
  121.   // Register the endpoint description with the AF
  122.   afRegister( &SampleApp_epDesc );
  123.   

  124.   uint8 test[]={"欢迎使用无线工业粉尘监测仪"},len=0;
  125.   len = sizeof(test);
  126.   voice_input(test,len);
  127. }

  128. /**********************************************
  129. * @fn      SampleApp_ProcessEvent
  130. *
  131. * @brief   Generic Application Task event processor.  This function
  132. *          is called to process all events for the task.  Events
  133. *          include timers, messages and any other user defined events.
  134. *
  135. * @param   task_id  - The OSAL assigned task ID.
  136. * @param   events - events to process.  This is a bit map and can
  137. *                   contain more than one event.
  138. *
  139. * @return  none
  140. */
  141. uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )
  142. {
  143.   afIncomingMSGPacket_t *MSGpkt;
  144.   (void)task_id;  // Intentionally unreferenced parameter
  145.   
  146.   if ( events & SYS_EVENT_MSG )
  147.   {
  148.     MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID );
  149.     while ( MSGpkt )
  150.     {
  151.       switch ( MSGpkt->hdr.event )
  152.       {
  153.       case CMD_SERIAL_MSG: //串口收到数据后由 MT_UART 层传递过来的
  154.         SampleApp_SerialCMD((mtOSALSerialData_t *)MSGpkt);
  155.         break;

  156.       case AF_INCOMING_MSG_CMD:
  157.         SampleApp_MessageMSGCB( MSGpkt );
  158.         break;
  159.         
  160.         // Received whenever the device changes state in the network
  161.       case ZDO_STATE_CHANGE:
  162.         SampleApp_NwkState = (devStates_t)(MSGpkt->hdr.status);
  163.         break;
  164.         
  165.       default:
  166.         break;
  167.       }
  168.       
  169.       // Release the memory
  170.       osal_msg_deallocate( (uint8 *)MSGpkt );
  171.       
  172.       // Next - if one is available
  173.       MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID );
  174.     }
  175.    
  176.     // return unprocessed events
  177.     return (events ^ SYS_EVENT_MSG);
  178.   }
  179.   
  180.   return 0;
  181. }


  182. /*对接收到的串口数据进行处理*/
  183. void SampleApp_SerialCMD(mtOSALSerialData_t *cmdMsg)
  184. {
  185.   uint8 *str=NULL; //len 有用数据长度
  186.   str=cmdMsg->msg; //指向数据开头
  187.   if( (*(str+1) ==0x42) && (*(str+2) ==0x4D) )
  188.     SampleApp_SendPointToPointMessage(str);//将数据通过广播发送
  189. }

  190. void SampleApp_HandleKeys( uint8 shift, uint8 keys )
  191. {
  192.   
  193. }


  194. /*协调器对接收到的数据进行处理*/
  195. void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
  196. {
  197.   uint8 PM[10],WS[10];
  198.   switch ( pkt->clusterId )
  199.   {
  200.   case SAMPLEAPP_POINT_TO_POINT_CLUSTERID:
  201.     if(pkt->cmd.Data[1] == 0X42 && pkt->cmd.Data[2] == 0X4d)//判断粉尘数据是否符合协议
  202.     {
  203.       /*协调器接收到终端节点的数据后对数据进行剪切*/
  204.       uint16 PM1_0,PM2_5,PM10;
  205.       PM[0] = pkt->cmd.Data[1];
  206.       PM[1] = pkt->cmd.Data[2];
  207.       PM[2] = pkt->cmd.Data[5];
  208.       PM[3] = pkt->cmd.Data[6];
  209.       PM[4] = pkt->cmd.Data[7];
  210.       PM[5] = pkt->cmd.Data[8];
  211.       PM[6] = pkt->cmd.Data[9];
  212.       PM[7] = pkt->cmd.Data[10];
  213.       PM[8] = 0xdd;
  214.       PM[9] = 0xff;
  215.       
  216.       PM1_0 = (PM[2]*256) + PM[3];
  217.       PM2_5 = (PM[4]*256) + PM[5];
  218.       PM10 =  (PM[6]*256) + PM[7];
  219.       if( (PM1_0 < PM2_5 < PM10) && (PM1_0<2000) &&(PM2_5<2000) && (PM10<2000))//判断粉尘浓度是否超过设定阈值
  220.       {
  221.         HalUARTWrite(0,PM,10);
  222.         
  223.         if(( PM1_0>1000) | (PM2_5>1000)| (PM10>1000) )
  224.         {
  225.           uint8 test[]={"警告警告粉尘浓度超标"},len=0;//发送报警信息到语音合成模块
  226.           len = sizeof(test);
  227.           voice_input(test,len);
  228.         }
  229.       }
  230.       
  231.     }
  232.    
  233.     if(pkt->cmd.Data[1] == 0xaa && pkt->cmd.Data[2] == 0xbb)//判断温湿度数据是否符合协议
  234.     {
  235.       WS[0] = pkt->cmd.Data[1];
  236.       WS[1] = pkt->cmd.Data[2];
  237.       WS[2] = pkt->cmd.Data[3];
  238.       WS[3] = pkt->cmd.Data[4];
  239.       WS[4] = pkt->cmd.Data[5];
  240.       WS[5] = pkt->cmd.Data[6];
  241.       WS[6] = pkt->cmd.Data[7];
  242.       WS[7] = pkt->cmd.Data[8];
  243.       WS[8] = 0xdd;
  244.       WS[9] = 0xff;
  245.       HalUARTWrite(0,WS,10);
  246.       
  247.       if(WS[2]>0x30 )//判断温度是否超过设定阈值
  248.       {
  249.         uint8 test[]={"警告警告温度过高"},len=0;//发送报警信息到语音合成模块
  250.         len = sizeof(test);
  251.         voice_input(test,len);
  252.       }
  253.       if(WS[3]>0x40 )////判断湿度浓度是否超过设定阈值
  254.       {
  255.         uint8 test[]={"警告警告湿度过高"},len=0;//发送报警信息到语音合成模块
  256.         len = sizeof(test);
  257.         voice_input(test,len);
  258.       }
  259.       break;
  260.     }
  261.   }
  262. }


  263. /*点对点传输函数,终端节点用来发送点对点消息到协调器*/
  264. void SampleApp_SendPointToPointMessage( uint8 *dat )
  265. {
  266.   if ( AF_DataRequest( &Point_To_Point_DstAddr,
  267.                       &SampleApp_epDesc,
  268.                       SAMPLEAPP_POINT_TO_POINT_CLUSTERID,
  269.                       *dat,//(byte)osal_strlen(dat),
  270.                       dat,
  271.                       &SampleApp_TransID,
  272.                       AF_DISCV_ROUTE,
  273.                       AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
  274.   {
  275.   }
  276.   else
  277.   {
  278.     // Error occurred in request to send.
  279.   }
  280. }
  281. /**********************************************

  282. **********************************************/
复制代码

kiasur 发表于 2016-8-15 13:39:05

【Gokit2&ZigBee&STM32】之无线工业粉尘监测仪

本帖最后由 kiasur 于 2016-8-17 15:17 编辑

·项目BOM清单
《无线工业粉尘监测仪》BOM清单
编号品名规格单位单价/元数量总价/元
1ZigBee-CC2530最小系统1003300
2攀藤科技G1粉尘浓度传感器1051105
3神舟3号开发板STM32ZET61951195
4聚合物电芯8000毫安35.8271.6
5模型工具及材料112.731112.73
6Gokit2010
7太阳能电池板5V\1.2W18.9118.9
8升压模块0.3910.39
9杜邦线40P4.414.4
10锂电池充电板1.111.1
11LCD-12864液晶屏26.5126.5
12语音合成模块SYN628857157
13带外壳喇叭\0.5W\8欧 10110
14温湿度传感器DHT1117117
15优力源14500锂电池12.8338.4
958.02



Genius 发表于 2016-8-10 13:28:25
本帖最后由 Genius 于 2016-8-10 13:34 编辑

小伙伴,你好。
你是第24个参赛者。
欢迎加入开源大赛群,一起交流讨论
机智云开源硬件大赛 583190709
加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

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