[STM32H7] 【STM32H7S78-DK测评】基于STM32H7S7智慧工农业控制台

[复制链接]
3355|6
 楼主| abner_ma 发表于 2024-10-8 08:46 | 显示全部楼层 |阅读模式
    今年的中央一号文件提出,“持续实施数字乡村发展行动,发展智慧农业”。近年来,物联网、大数据、人工智能等技术在农业领域深入应用,促进农业生产更便捷、管理更高效,智能农业监控系统。基于STM32H7S7智慧工农业控制台通过STM32H7S7嵌入式系统结合各种传感器、执行器和通信模块,实现对农田环境的实时监测、自动控制和数据传输。所需要的器件:
   4G模块:移远EC800    WiFi:EWM3080
WWW.png

土壤传感器可以同时测量土壤温度、土壤体积含水量和土壤电导率三项参数,通过RS485 modbus 与STM32H7S7进行通信。

uu8.png

   首先基于STM32H7S78-DK强大的GUI显示能力,  作为看板和控制台,实时监测农业各种参数,控规按键进行远程遥控。基于Freertos和touchGFX搭建物联网边缘控制台,通过4G或者WiFi读取传感器参数,实时显示。TouchGFX生态链工具支持全系列STM32 MCU,能够最大化发挥STM32H7RS内置的硬件图形优化器性能,并且通过“所见即所得”的开发界面,自动生成代码,让用户使用起来非常的简单且高效。TouchGFX Core提供了性能测量信号,通过与STM32CubeMX配置的GPIO同步,可以实现对渲染时间等指标的可视化。在生成器中,GPIO类的函数被用于响应这些信号。
  STM32H7S78的LTDC+DMA2D性能,100Hz以上无压力,刷800*480图片和色块仅需2ms一张,实现了更多的动画效果以及性能优化,把CPU从图形任务中释放出来,低功耗,少存储,具有更高的GUI性能,可实现平滑而丰富的图形效果。

智慧农业_阿里云.PNG



  物接入(IoT Hub)是面向物联网领域开发者的全托管云服务,通过主流的物联网协议(如 MQTT)通讯,可以在智能设备与云端之间建立安全的双向连接,快速实现物联网项目。物接入分为设备型(原物管理)和数据型两种项目类型。设备型适用于基于设备的物联网场景;数据型适用于基于数据流的物联网场景。利用物接入来作为搭建物联网应用的第一步,支持亿级并发连接和消息数,支持海量设备与云端安全可靠的双向连接,无缝对接阿里云,华为云,或者百度天工平台和百度智能云。

框架:
架构.png

物模型:物模型由一个或多个属性构成,可以用他来表示一类(或同一型号的一批)设备。基于物模型可以创建物影子。
    MQTT(Message Queuing Telemetry Transport)是一个基于二进制消息的客户端服务端架构的发布/订阅(Publish/Subscribe)模式的消息传输协议,最早由
IBM 提出的,如今已经业界通行规范,更符合机器与机器的通信(M2M)以及物联网环境(IoT)。

   MQTT 关键代码:
  1. #include "mqtt.h"
  2. #include "stdlib.h"
  3. #include "string.h"

  4. _MQTT_INFO mqtt_info;

  5. /*******************************************************************************
  6. * Function Name  : Mqtt_Init
  7. * Description    : MQTT³õʼ»¯
  8. * Input          : keep_time   ±£»îʱ¼ä
  9.                                    Data_Send   ·¢Ëͻص÷
  10.                                    Data_Recv   ½ÓÊջص÷
  11. * Output         : None
  12. * Return         : None
  13. * Note                         : None
  14. *******************************************************************************/
  15. void Mqtt_Init(uint16_t keep_time,void (*Data_Send)(u8 *databuff, u16 len),void (*Data_Recv)(u8 *databuff, u16 len))
  16. {
  17.         mqtt_info.keep_live_time = keep_time;
  18.         mqtt_info.mqtt_Data_Send = Data_Send;
  19.         mqtt_info.mqtt_Data_Recv = Data_Recv;
  20. }

  21. /*******************************************************************************
  22. * Function Name  : Mqtt_Connect
  23. * Description    : MQTTÁ¬½Ó±¨ÎÄ
  24. * Input          : client_id   ¿Í»§¶ËID
  25.                                    usr_name   Óû§Ãû
  26.                                    passward   ÃÜÂë
  27. * Output         : None
  28. * Return         : None
  29. * Note                         : None
  30. *******************************************************************************/
  31. void Mqtt_Connect(char *client_id, char *usr_name, char *passward)
  32. {
  33.         int temp,Remaining_len;
  34.         u16 Fixed_len,Variable_len,Payload_len;
  35.         u16 client_id_len,usr_name_len,passward_len;
  36.         uint8_t *buff;
  37.        
  38.         //Êý¾Ý»º³åÇøÖ¸Õë
  39.         buff = mqtt_info.TX_Buff;
  40.        
  41.         client_id_len = strlen(client_id);
  42.         usr_name_len = strlen(usr_name);
  43.         passward_len = strlen(passward);
  44.        
  45.         Fixed_len = 1;                                                        //Á¬½Ó±¨ÎÄÖУ¬¹Ì¶¨±¨Í·³¤¶ÈÔÝʱÏÈ=1
  46.         Variable_len = 10;                                                    //Á¬½Ó±¨ÎÄÖУ¬¿É±ä±¨Í·³¤¶È=10
  47.         Payload_len = 2 + client_id_len + 2 + usr_name_len + 2 + passward_len; //Á¬½Ó±¨ÎÄÖУ¬¸ºÔس¤¶È      
  48.         Remaining_len = Variable_len + Payload_len;                           //Ê£Ó೤¶È=¿É±ä±¨Í·³¤¶È+¸ºÔس¤¶È
  49.        
  50.         *buff++ = MSG_MQTT_CONN;                       //¹Ì¶¨±¨Í·µÚ1¸ö×Ö½Ú £º¹Ì¶¨0x10       
  51.        
  52.         do{                                      //Ñ­»·´¦Àí¹Ì¶¨±¨Í·ÖеÄÊ£Ó೤¶È×Ö½Ú£¬×Ö½ÚÁ¿¸ù¾ÝÊ£Óà×Ö½ÚµÄÕæÊµ³¤¶È±ä»¯
  53.                 temp = Remaining_len%128;            //Ê£Ó೤¶ÈÈ¡Óà128
  54.                 Remaining_len = Remaining_len/128;   //Ê£Ó೤¶ÈÈ¡Õû128
  55.                 if(Remaining_len>0)                      
  56.                         temp |= 0x80;                    //°´Ð­ÒéÒªÇóλ7ÖÃλ         
  57.                 *buff++ = temp;         //Ê£Ó೤¶È×ֽڼǼһ¸öÊý¾Ý
  58.                 Fixed_len++;                             //¹Ì¶¨±¨Í·×ܳ¤¶È+1   
  59.         }while(Remaining_len>0);                 //Èç¹ûRemaining_len>0µÄ»°£¬ÔٴνøÈëÑ­»·
  60.        
  61.         *buff++ = 0x00;    //¿É±ä±¨Í·µÚ1¸ö×Ö½Ú £º¹Ì¶¨0x00                   
  62.         *buff++ = 0x04;    //¿É±ä±¨Í·µÚ2¸ö×Ö½Ú £º¹Ì¶¨0x04
  63.         *buff++ = 0x4D;           //¿É±ä±¨Í·µÚ3¸ö×Ö½Ú £º¹Ì¶¨0x4D--M
  64.         *buff++ = 0x51;           //¿É±ä±¨Í·µÚ4¸ö×Ö½Ú £º¹Ì¶¨0x51--Q
  65.         *buff++ = 0x54;           //¿É±ä±¨Í·µÚ5¸ö×Ö½Ú £º¹Ì¶¨0x54--T
  66.         *buff++ = 0x54;           //¿É±ä±¨Í·µÚ6¸ö×Ö½Ú £º¹Ì¶¨0x54--T
  67.         *buff++ = 0x04;           //¿É±ä±¨Í·µÚ7¸ö×Ö½Ú £º¹Ì¶¨0x04,ЭÒé¼¶±ð
  68.         *buff++ = 0xC2;           //¿É±ä±¨Í·µÚ8¸ö×Ö½Ú £ºÊ¹ÄÜÓû§ÃûºÍÃÜÂëУÑ飬²»Ê¹ÓÃÒÅÖö£¬²»±£Áô»á»°
  69.         *buff++ = mqtt_info.keep_live_time/256;    //¿É±ä±¨Í·µÚ9¸ö×Ö½Ú £º±£»îʱ¼ä¸ß×Ö½Ú
  70.         *buff++ = mqtt_info.keep_live_time%256;    //¿É±ä±¨Í·µÚ10¸ö×Ö½Ú£º±£»îʱ¼ä¸ß×Ö½Ú
  71.        
  72.         //¿Í»§¶ËID
  73.         *buff++ = client_id_len/256;             //¿Í»§¶ËID³¤¶È¸ß×Ö½Ú
  74.         *buff++ = client_id_len%256;             //¿Í»§¶ËID³¤¶ÈµÍ×Ö½Ú
  75.         memcpy(buff,client_id,client_id_len);    //¸´Öƿͻ§¶ËID
  76.         buff += client_id_len;
  77.        
  78.         //Óû§Ãû     
  79.         *buff++ = usr_name_len/256;                      //Óû§Ãû³¤¶È¸ß×Ö½Ú
  80.         *buff++ = usr_name_len%256;                          //Óû§Ãû³¤¶ÈµÍ×Ö½Ú
  81.         memcpy(buff,usr_name,usr_name_len);      //¸´ÖÆÓû§Ãû       
  82.         buff += usr_name_len;
  83.        
  84.         //ÃÜÂë
  85.         *buff++ = passward_len/256;                            //ÃÜÂ볤¶È¸ß×Ö½Ú
  86.         *buff++ = passward_len%256;                            //ÃÜÂ볤¶ÈµÍ×Ö½Ú
  87.         memcpy(buff,passward,passward_len);     //¸´ÖƹýÀ´ÃÜÂë×Ö´®
  88.         buff += passward_len;

  89.         //·¢ËÍÊý¾Ý
  90.         if(mqtt_info.mqtt_Data_Send != NULL)
  91.                 mqtt_info.mqtt_Data_Send(mqtt_info.TX_Buff,Fixed_len + Variable_len + Payload_len);
  92. }

  93. /*******************************************************************************
  94. * Function Name  : Mqtt_DisConnect
  95. * Description    : MQTT¶Ï¿ªÁ¬½Ó
  96. * Input          : None
  97. * Output         : None
  98. * Return         : None
  99. * Note                         : None
  100. *******************************************************************************/
  101. void Mqtt_DisConnect(void)
  102. {
  103.         uint8_t *buff;
  104.        
  105.         //Êý¾Ý»º³åÇøÖ¸Õë
  106.         buff = mqtt_info.TX_Buff;
  107.        
  108.         *buff++ = MSG_MQTT_DISCONN;                            //¹¦ÄÜÂë
  109.         *buff++ = 0x00;                            

  110.         //·¢ËÍÊý¾Ý
  111.         if(mqtt_info.mqtt_Data_Send != NULL)
  112.                 mqtt_info.mqtt_Data_Send(mqtt_info.TX_Buff,2);
  113. }

  114. /*******************************************************************************
  115. * Function Name  : Mqtt_Ping
  116. * Description    : MQTTÐÄÌø
  117. * Input          : None
  118. * Output         : None
  119. * Return         : None
  120. * Note                         : None
  121. *******************************************************************************/
  122. void Mqtt_Ping(void)
  123. {
  124.         uint8_t *buff;
  125.        
  126.         //Êý¾Ý»º³åÇøÖ¸Õë
  127.         buff = mqtt_info.TX_Buff;
  128.        
  129.         *buff++ = MSG_MQTT_PING;                            //¹¦ÄÜÂë
  130.         *buff++ = 0x00;                            

  131.         //·¢ËÍÊý¾Ý
  132.         if(mqtt_info.mqtt_Data_Send != NULL)
  133.                 mqtt_info.mqtt_Data_Send(mqtt_info.TX_Buff,2);
  134. }

  135. /*******************************************************************************
  136. * Function Name  : Mqtt_PingAck
  137. * Description    : MQTTÐÄÌøÓ¦´ð,·þÎñ¶Ëµ÷ÓÃ
  138. * Input          : None
  139. * Output         : None
  140. * Return         : None
  141. * Note                         : None
  142. *******************************************************************************/
  143. void Mqtt_PingAck(void)
  144. {
  145.         uint8_t *buff;
  146.        
  147.         //Êý¾Ý»º³åÇøÖ¸Õë
  148.         buff = mqtt_info.TX_Buff;
  149.        
  150.         *buff++ = MSG_MQTT_PING_ACK;                            //¹¦ÄÜÂë
  151.         *buff++ = 0x00;                          

  152.         //·¢ËÍÊý¾Ý
  153.         if(mqtt_info.mqtt_Data_Send != NULL)
  154.                 mqtt_info.mqtt_Data_Send(mqtt_info.TX_Buff,2);
  155. }

  156. /*******************************************************************************
  157. * Function Name  : Mqtt_Subscribe
  158. * Description    : SUBSCRIBE¶©ÔÄtopic±¨ÎÄ
  159. * Input          : topic_name£º¶©ÔÄtopic±¨ÎÄÃû³Æ  PackID  ±¨Îıêʶ·û(°üºÅ)  
  160.                    QoS£º¶©Ôĵȼ¶        
  161. * Output         : None
  162. * Return         : None
  163. * Note                         : None
  164. *******************************************************************************/
  165. void Mqtt_Subscribe(char *topic_name, uint16_t PackID, uint8_t QoS)
  166. {       
  167.         int temp,Remaining_len;
  168.         u16 topic_len,pack_len,Variable_len,Payload_len;
  169.         uint8_t *buff;
  170.        
  171.         //Êý¾Ý»º³åÇøÖ¸Õë
  172.         buff = mqtt_info.TX_Buff;
  173.         //Ö÷Ìⳤ¶È
  174.         topic_len = strlen(topic_name);
  175.         Variable_len = 2;                           //SUBSCRIBE±¨ÎÄÖÐ,±¨Îıêʶ·û³¤¶È,¹Ì¶¨Îª2
  176.         Payload_len = 2 + strlen(topic_name) + 1;   //¼ÆËãÓÐЧ¸ººÉ³¤¶È = 2×Ö½Ú(topic_name³¤¶È)+ topic_name×Ö·û´®µÄ³¤¶È + 1×Ö½Ú·þÎñµÈ¼¶
  177.         Remaining_len = Variable_len + Payload_len; //Ê£Ó೤¶È
  178.        
  179.         *buff++ = MSG_MQTT_SUBSCRIBE;                               //µÚ1¸ö×Ö½Ú £º¹Ì¶¨0x82        

  180.         do{                                      //Ñ­»·´¦Àí¹Ì¶¨±¨Í·ÖеÄÊ£Ó೤¶È×Ö½Ú£¬×Ö½ÚÁ¿¸ù¾ÝÊ£Óà×Ö½ÚµÄÕæÊµ³¤¶È±ä»¯
  181.                 temp = Remaining_len%128;            //Ê£Ó೤¶ÈÈ¡Óà128
  182.                 Remaining_len = Remaining_len/128;   //Ê£Ó೤¶ÈÈ¡Õû128
  183.                 if(Remaining_len>0)                      
  184.                         temp |= 0x80;                    //°´Ð­ÒéÒªÇóλ7ÖÃλ         
  185.                 *buff++ = temp;         //Ê£Ó೤¶È×ֽڼǼһ¸öÊý¾Ý  
  186.         }while(Remaining_len>0);                 //Èç¹ûRemaining_len>0µÄ»°£¬ÔٴνøÈëÑ­»·
  187.        
  188.         *buff++ = PackID/256;                    //±¨Îıêʶ·û¸ß×Ö½Ú,°üºÅ
  189.         *buff++ = PackID%256;                             //±¨Îıêʶ·ûµÍ×Ö½Ú,°üºÅ
  190.         *buff++ = topic_len/256;                 //topic_name³¤¶È¸ß×Ö½Ú
  191.         *buff++ = topic_len%256;                         //topic_name³¤¶ÈµÍ×Ö½Ú
  192.         memcpy(buff,topic_name,topic_len);       //¸´ÖÆtopic_name       
  193.         buff += topic_len;
  194.        
  195.         *buff++ = QoS;                           //×îºó1¸ö×Ö½Ú£º¶©Ôĵȼ¶
  196.        
  197.         pack_len = buff - mqtt_info.TX_Buff;
  198.        
  199.         //·¢ËÍÊý¾Ý
  200.         if(mqtt_info.mqtt_Data_Send != NULL)
  201.                 mqtt_info.mqtt_Data_Send(mqtt_info.TX_Buff,pack_len);
  202. }

  203. /*******************************************************************************
  204. * Function Name  : Mqtt_UnSubscribe
  205. * Description    : È¡Ïû¶©ÔÄtopic±¨ÎÄ
  206. * Input          : topic_name£º¶©ÔÄtopic±¨ÎÄÃû³Æ  PackID  ±¨Îıêʶ·û(°üºÅ)      
  207. * Output         : None
  208. * Return         : None
  209. * Note                         : None
  210. *******************************************************************************/
  211. void Mqtt_UnSubscribe(char *topic_name, uint16_t PackID)
  212. {       
  213.         int temp,Remaining_len;
  214.         u16 topic_len,pack_len,Variable_len,Payload_len;
  215.         uint8_t *buff;
  216.        
  217.         //Êý¾Ý»º³åÇøÖ¸Õë
  218.         buff = mqtt_info.TX_Buff;
  219.         //Ö÷Ìⳤ¶È
  220.         topic_len = strlen(topic_name);
  221.         Variable_len = 2;                           //SUBSCRIBE±¨ÎÄÖÐ,±¨Îıêʶ·û³¤¶È,¹Ì¶¨Îª2
  222.         Payload_len = 2 + strlen(topic_name);   //¼ÆËãÓÐЧ¸ººÉ³¤¶È = 2×Ö½Ú(topic_name³¤¶È)+ topic_name×Ö·û´®µÄ³¤¶È
  223.         Remaining_len = Variable_len + Payload_len; //Ê£Ó೤¶È
  224.        
  225.         *buff++ = MSG_MQTT_UNSUBSCRIBE;                               //µÚ1¸ö×Ö½Ú £º¹Ì¶¨0xA2        

  226.         do{                                      //Ñ­»·´¦Àí¹Ì¶¨±¨Í·ÖеÄÊ£Ó೤¶È×Ö½Ú£¬×Ö½ÚÁ¿¸ù¾ÝÊ£Óà×Ö½ÚµÄÕæÊµ³¤¶È±ä»¯
  227.                 temp = Remaining_len%128;            //Ê£Ó೤¶ÈÈ¡Óà128
  228.                 Remaining_len = Remaining_len/128;   //Ê£Ó೤¶ÈÈ¡Õû128
  229.                 if(Remaining_len>0)                      
  230.                         temp |= 0x80;                    //°´Ð­ÒéÒªÇóλ7ÖÃλ         
  231.                 *buff++ = temp;         //Ê£Ó೤¶È×ֽڼǼһ¸öÊý¾Ý  
  232.         }while(Remaining_len>0);                 //Èç¹ûRemaining_len>0µÄ»°£¬ÔٴνøÈëÑ­»·
  233.        
  234.         *buff++ = PackID/256;                    //±¨Îıêʶ·û¸ß×Ö½Ú,°üºÅ
  235.         *buff++ = PackID%256;                             //±¨Îıêʶ·ûµÍ×Ö½Ú,°üºÅ
  236.         *buff++ = topic_len/256;                 //topic_name³¤¶È¸ß×Ö½Ú
  237.         *buff++ = topic_len%256;                         //topic_name³¤¶ÈµÍ×Ö½Ú
  238.         memcpy(buff,topic_name,topic_len);       //¸´ÖÆtopic_name       
  239.         buff += topic_len;
  240.        
  241.         pack_len = buff - mqtt_info.TX_Buff;
  242.        
  243.         //·¢ËÍÊý¾Ý
  244.         if(mqtt_info.mqtt_Data_Send != NULL)
  245.                 mqtt_info.mqtt_Data_Send(mqtt_info.TX_Buff,pack_len);
  246. }

  247. /*******************************************************************************
  248. * Function Name  : Mqtt_Publish
  249. * Description    : Ïòtopic·¢²¼±¨ÎÄ
  250. * Input          : topic_name£º¶©ÔÄtopic±¨ÎÄÃû³Æ  PackID  ±¨Îıêʶ·û(°üºÅ)  
  251.                    QoS£ºµÈ¼¶    data ÓÐЧÊý¾Ý   data_len  ÓÐЧÊý¾Ý³¤¶È
  252. * Output         : None
  253. * Return         : None
  254. * Note                         : PackIDÖ»Óе±QoSΪ1»ò2ʱÓÐЧ
  255. *******************************************************************************/
  256. void Mqtt_Publish(char *topic_name, uint16_t PackID, uint8_t QoS, uint8_t *data, uint16_t data_len)
  257. {       
  258.         int temp,Remaining_len;
  259.         u16 topic_len,pack_len,Payload_len;
  260.         uint8_t *buff;
  261.        
  262.         //Êý¾Ý»º³åÇøÖ¸Õë
  263.         buff = mqtt_info.TX_Buff;
  264.         //Ö÷Ìⳤ¶È
  265.         topic_len = strlen(topic_name);
  266.         Payload_len = 2 + strlen(topic_name) + data_len;   //¼ÆËãÓÐЧ¸ººÉ³¤¶È = 2×Ö½Ú(topic_name³¤¶È)+ topic_name×Ö·û´®µÄ³¤¶È + Êý¾Ý³¤¶È
  267.         Remaining_len = Payload_len; //Ê£Ó೤¶È
  268.        
  269.         if(QoS == 0)
  270.         {
  271.                 *buff++ = MSG_MQTT_PUBLISH_QS0;                               //µÚ1¸ö×Ö½Ú £º¹Ì¶¨0x30
  272.         }
  273.         else if(QoS == 1)
  274.         {
  275.                 Remaining_len += 2;                      //Ê£Ó೤¶È,2Ϊ±¨Îıêʶ·û³¤¶È
  276.                 *buff++ = MSG_MQTT_PUBLISH_QS1;                               //µÚ1¸ö×Ö½Ú £º¹Ì¶¨0x32
  277.         }
  278.         else if(QoS == 2)
  279.         {
  280.                 Remaining_len += 2;                      //Ê£Ó೤¶È,2Ϊ±¨Îıêʶ·û³¤¶È
  281.                 *buff++ = MSG_MQTT_PUBLISH_QS2;                               //µÚ1¸ö×Ö½Ú £º¹Ì¶¨0x34
  282.         }

  283.         do{                                      //Ñ­»·´¦Àí¹Ì¶¨±¨Í·ÖеÄÊ£Ó೤¶È×Ö½Ú£¬×Ö½ÚÁ¿¸ù¾ÝÊ£Óà×Ö½ÚµÄÕæÊµ³¤¶È±ä»¯
  284.                 temp = Remaining_len%128;            //Ê£Ó೤¶ÈÈ¡Óà128
  285.                 Remaining_len = Remaining_len/128;   //Ê£Ó೤¶ÈÈ¡Õû128
  286.                 if(Remaining_len>0)                      
  287.                         temp |= 0x80;                    //°´Ð­ÒéÒªÇóλ7ÖÃλ         
  288.                 *buff++ = temp;         //Ê£Ó೤¶È×ֽڼǼһ¸öÊý¾Ý  
  289.         }while(Remaining_len>0);                 //Èç¹ûRemaining_len>0µÄ»°£¬ÔٴνøÈëÑ­»·
  290.        
  291.         *buff++ = topic_len/256;                 //topic_name³¤¶È¸ß×Ö½Ú
  292.         *buff++ = topic_len%256;                         //topic_name³¤¶ÈµÍ×Ö½Ú
  293.         memcpy(buff,topic_name,topic_len);       //¸´ÖÆtopic_name       
  294.         buff += topic_len;
  295.        
  296.         if(QoS != 0)  
  297.         {
  298.                 *buff++ = PackID/256;                    //±¨Îıêʶ·û¸ß×Ö½Ú,°üºÅ
  299.                 *buff++ = PackID%256;                             //±¨Îıêʶ·ûµÍ×Ö½Ú,°üºÅ
  300.         }
  301.        
  302.         //¸´ÖÆÓû§Êý¾Ý
  303.         memcpy(buff,data,data_len);
  304.         buff += data_len;
  305.        
  306.         pack_len = buff - mqtt_info.TX_Buff;
  307.        
  308.         //·¢ËÍÊý¾Ý
  309.         if(mqtt_info.mqtt_Data_Send != NULL)
  310.                 mqtt_info.mqtt_Data_Send(mqtt_info.TX_Buff,pack_len);
  311. }

  312. /*******************************************************************************
  313. * Function Name  : Mqtt_RecvHandle
  314. * Description    : MQTT½ÓÊÕÊý¾Ý½âÎö
  315. * Input          : buff   Êý¾Ý»º³åÇø
  316. * Output         : None
  317. * Return         : None
  318. * Note                         : 0  ³É¹¦,ÆäËü ʧ°Ü
  319. *******************************************************************************/
  320. uint8_t Mqtt_RecvHandle(uint8_t *buff)
  321. {
  322.         uint8_t *p;
  323.         uint8_t encodeByte = 0;
  324.         uint32_t multiplier = 1, Remaining_len = 0;
  325.         uint8_t QS_level = 0;
  326.        
  327.         p = buff;
  328.        
  329.         //½âÎö½ÓÊÕÊý¾Ý
  330.         if((*p != 0x30)&&(*p != 0x32)&&(*p != 0x34))   //²»ÊÇ·¢²¼±¨ÎÄÍ·
  331.                 return 1;
  332.        
  333.         if(*p != 0x30) QS_level = 1;    //±ê¼ÇqsµÈ¼¶²»Îª0
  334.        
  335.         p++;
  336.         //ÌáȡʣÓàÊý¾Ý³¤¶È
  337.         do{
  338.                 encodeByte = *p++;
  339.                 Remaining_len += (encodeByte & 0x7F) * multiplier;
  340.                 multiplier *= 128;
  341.                
  342.                 if(multiplier > 128*128*128) //³¬³öÊ£Ó೤¶È×î´ó4¸ö×Ö½ÚµÄÒªÇó,´íÎó
  343.                         return 2;
  344.         }while((encodeByte & 0x80) != 0);
  345.        
  346.         //ÌáÈ¡Ö÷ÌâÊý¾Ý³¤¶È
  347.         mqtt_info.rx_topic_len = *p++;
  348.         mqtt_info.rx_topic_len = mqtt_info.rx_topic_len * 256 + *p++;
  349.         //ÌáÈ¡Ö÷Ìâ
  350.         memcpy(mqtt_info.RX_Topic,p,mqtt_info.rx_topic_len);
  351.         p += mqtt_info.rx_topic_len;
  352.        
  353.         if(QS_level != 0)  //Ìø¹ý±¨Îıêʶ·û
  354.                 p += 2;   
  355.        
  356.         //ÌáÈ¡Óû§ÄêÊý¾Ý
  357.         if(mqtt_info.mqtt_Data_Recv != NULL)
  358.                 mqtt_info.mqtt_Data_Recv(p,Remaining_len - mqtt_info.rx_topic_len - 2);
  359.        
  360.         return 0;
  361. }


后台对接阿里云

W1.png

W2.png




W3.png
星辰大海不退缩 发表于 2024-10-8 22:16 | 显示全部楼层
阿里云还是性能很强大的
cooldog123pp 发表于 2024-10-10 08:32 | 显示全部楼层
阿里云还是性能很强大的,不是楼主这个是要花钱的吗,一年多少钱,参考一下。
chenqianqian 发表于 2024-10-10 10:06 来自手机 | 显示全部楼层
H7S7主要是应用于安全领域吗?
 楼主| abner_ma 发表于 2024-10-11 15:35 | 显示全部楼层
chenqianqian 发表于 2024-10-10 10:06
H7S7主要是应用于安全领域吗?

带AES,哈希的ST芯片都可以用于安全,这个用在物联网或者GUI 大屏显示可以大显身手
Stahan 发表于 2024-10-13 22:46 | 显示全部楼层
用这么好的芯片
javon 发表于 2025-7-8 09:01 | 显示全部楼层
阿里云很强大
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:项目经理
简介:资深嵌入式开发工程师

104

主题

191

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部