China Mobile 4G module-ML302-OpenCpu development- (MQTT se connecte à la communication Alibaba Cloud-RRPC)

Station B: https://space.bilibili.com/309103931

Colonne module ML302 China Mobile 4G: https://blog.csdn.net/qq_33259323/category_10453372.html

China Mobile 4G Module-ML302 Collection: https://www.bilibili.com/read/readlist/rl328642

1. China Mobile 4G module-ML302-OpenCpu development- (compilation et gravure du micrologiciel)

https://blog.csdn.net/qq_33259323/article/details/108586847

https://www.bilibili.com/read/cv7876504

2. China Mobile 4G module-ML302-OpenCpu development- (MQTT se connecte à Alibaba Cloud)

https://blog.csdn.net/qq_33259323/article/details/108638945

https://www.bilibili.com/read/cv7876527

2.1 China Mobile 4G module-ML302-OpenCpu development- (connexion MQTT à Alibaba Cloud-subscribe topic)

https://blog.csdn.net/qq_33259323/article/details/108960540

https://www.bilibili.com/read/cv7879954

2.2 China Mobile 4G module-ML302-OpenCpu development- (connexion MQTT à Alibaba Cloud recevant et envoyant des données)

https://blog.csdn.net/qq_33259323/article/details/108964810

https://www.bilibili.com/read/cv7886836

2.3 China Mobile 4G Module-ML302-OpenCpu Development- (MQTT se connecte à la communication Alibaba Cloud-RRPC)

https://blog.csdn.net/qq_33259323/article/details/108965071

https://www.bilibili.com/read/cv7888259

3. China Mobile 4G module-ML302-OpenCpu développement-développement du port série

https://blog.csdn.net/qq_33259323/article/details/108974888

https://www.bilibili.com/read/cv7888865

4. China Mobile 4G module-ML302-OpenCpu development-51 Port série MCU vers I2C

https://blog.csdn.net/qq_33259323/article/details/109020642

https://www.bilibili.com/read/cv7922942

5. China Mobile 4G module-ML302-OpenCpu development-MCP23017 entrée / sortie

https://blog.csdn.net/qq_33259323/article/details/109109136

https://www.bilibili.com/read/cv7969395

7. Module 4G de mi-décalage-ML302-OpenCpu development-PCF8591 tension de mesure

https://blog.csdn.net/qq_33259323/article/details/109109266

https://www.bilibili.com/read/cv7969365

8. China Mobile 4G module-ML302-OpenCpu development-GPIO

https://blog.csdn.net/qq_33259323/article/details/108960947

https://www.bilibili.com/read/cv7877192

9. China Mobile 4G Module-ML302-OpenCpu Development-ADC

https://blog.csdn.net/qq_33259323/article/details/109020864

https://www.bilibili.com/read/cv7922958

10. China Mobile 4G Module-ML302-OpenCpu Development-CJSON

https://blog.csdn.net/qq_33259323/article/details/109020898

https://www.bilibili.com/read/cv7923020

11. China Mobile 4G Module-ML302-OpenCpu Development-HTTP

https://blog.csdn.net/qq_33259323/article/details/109020904

https://www.bilibili.com/read/cv7923054

China Mobile 4G module-ML302-OpenCpu development- (MQTT se connecte à la communication Alibaba Cloud-RRPC)

Qu'est-ce que la communication RRPC

Le protocole MQTT est un mode de communication asynchrone basé sur PUB / SUB, et ne convient pas aux scénarios où le côté serveur contrôle de manière synchrone le côté appareil pour renvoyer les résultats. La plate-forme Internet des objets a développé un ensemble de mécanismes de synchronisation des demandes et des réponses basés sur le protocole MQTT.Une communication synchrone peut être réalisée sans changer le protocole MQTT. La plate-forme IoT fournit des API au serveur. L'appareil doit uniquement répondre au message PUB dans un format fixe. Le serveur utilise l'API pour synchroniser les résultats de la réponse de l'appareil.

Glossaire

  • RRPC: Revert-RPC. RPC (Remote Procedure Call) adopte un modèle client / serveur, et les utilisateurs peuvent demander des services à distance sans connaître le protocole technique sous-jacent. RRPC peut réaliser la fonction de demande de l'appareil au serveur et de permettre à l'appareil de répondre.
  • Message de demande RRPC: un message envoyé du cloud à l'appareil.
  • Message de réponse RRPC: le message que l'appareil répond au cloud.
  • ID de message RRPC: l'ID de message unique généré par le cloud pour chaque appel RRPC.
  • Sujet d'abonnement RRPC: le sujet transmis lorsque le périphérique s'abonne aux messages RRPC contient des caractères génériques.

Principe RRPC

RRPC

Le processus spécifique est le suivant:

  1. La plate-forme IoT reçoit l'appel RRPC du serveur utilisateur et envoie un message de demande RRPC à l'appareil. Le corps du message correspond aux données transmises par l'utilisateur. La rubrique est la rubrique définie par la plateforme IoT, qui contient l'ID de message RRPC unique.
  2. Après avoir reçu le message de liaison descendante, l'appareil répond à un message de réponse RRPC au cloud en fonction du format de rubrique spécifié (y compris l'ID de message RRPC unique émis par le cloud auparavant). Le cloud extrait l'ID de message dans la rubrique et le met en correspondance avec le message de demande RRPC précédent. Répondez ensuite au serveur utilisateur.
  3. Si l'appareil n'est pas en ligne au moment de l'appel, le cloud renverra une erreur indiquant que l'appareil est hors ligne au serveur de l'utilisateur; si l'appareil ne répond pas au message de réponse RRPC dans le délai d'expiration (dans les 8 secondes), le cloud renverra une erreur de délai d'expiration au serveur de l'utilisateur.

Sujets liés à la communication RRPC

Les formats de sujet liés à la communication RRPC sont les suivants:

  • Message de demande RRPC Sujet: / sys / $ {YourProductKey} / $ {YourDeviceName} / rrpc / request / $ {messageId}
  • Message de réponse RRPC Sujet: / sys / $ {YourProductKey} / $ {YourDeviceName} / rrpc / response / $ {messageId}
  • RRPC 订阅 Sujet : / sys / $ {YourProductKey} / $ {YourDeviceName} / rrpc / request / +

Le contenu ci-dessus provient de https://help.aliyun.com/document_detail/90567.html

Il peut être vu de ce qui précède que le messageId doit être obtenu dans le sujet, puis renvoyé

 

Si votre module ML302 n'est pas connecté à Alibaba Cloud, vous pouvez jeter un coup d'œil à ceci.

https://blog.csdn.net/qq_33259323/article/details/108638945

https://www.bilibili.com/read/cv7876527

1. Abonnez-vous à la fonction RRPC example_subscribe_rrpc

int example_subscribe_rrpc(void *handle){
    int res = 0;
    const char *fmt = "/sys/%s/%s/rrpc/request/+";
    char *topic = NULL;
    int topic_len = 0;

    topic_len = strlen(fmt) + strlen(DEMO_PRODUCT_KEY) + strlen(DEMO_DEVICE_NAME) + 1;
    topic = HAL_Malloc(topic_len);
    if (topic == NULL) {
        cm_printf("[ALIYUN]: memory not enough\n");
        return -1;
    }
    memset(topic, 0, topic_len);
    HAL_Snprintf(topic, topic_len, fmt, DEMO_PRODUCT_KEY, DEMO_DEVICE_NAME);

    cm_printf("topic:%s \r\n",topic);

    res = IOT_MQTT_Subscribe(handle, topic, IOTX_MQTT_QOS0, example_message_arrive_rrpc, NULL);
    if (res < 0) {
        cm_printf("[ALIYUN]: subscribe failed\n");
        HAL_Free(topic);
        return -1;
    }

    HAL_Free(topic);
    return 0;
}

  2. Recevoir les données de la fonction example_message_arrive_rrpc

char DEMO_RRPC_SessionId[19];

void example_message_arrive_rrpc(void *pcontext, void *pclient, iotx_mqtt_event_msg_pt msg){
    iotx_mqtt_topic_info_t     *topic_info = (iotx_mqtt_topic_info_pt) msg->msg;
    char * sendMessage = NULL;
    const char * sendMessage_fmt = "%d";
    int sendMessage_len = 20;
    int cm_test_read_gpio = 0;

    cm_printf("example_message_arrive_rrpc \n");

    switch (msg->event_type) {
        case IOTX_MQTT_EVENT_PUBLISH_RECEIVED:
            /* print topic name and topic message */
            cm_printf("[ALIYUN]: Message Arrived:");
            cm_printf("Topic  : %.*s", topic_info->topic_len, topic_info->ptopic);
            cm_printf("Payload: %.*s", topic_info->payload_len, topic_info->payload);
            cm_printf("\n");

            // 提取sessionId
            strncpy(DEMO_RRPC_SessionId,topic_info->ptopic+46,19);
            cm_printf("[ALIYUN]: sessionId: %s",DEMO_RRPC_SessionId);


            //接收到的数据:topic_info->payload
            //干啥干啥干啥

            // 发送
            example_publish_rrpc(sendMessage);

            break;
        default:
            break;
    }
}

3. Envoyer la fonction example_publish_rrpc de données

int example_publish_rrpc(unsigned char * payload)
{
    int             res = 0;
    const char     *fmt = "/sys/%s/%s/rrpc/response/%s";
    char           *topic = NULL;
    int             topic_len = 0;
    //char           *payload = "{\"message\":\"hello!\"}";]

    cm_printf("MQTT发送信息:%s",payload);

    topic_len = strlen(fmt) + strlen(DEMO_PRODUCT_KEY) + strlen(DEMO_DEVICE_NAME) + 1 +strlen(DEMO_RRPC_SessionId);
    topic = HAL_Malloc(topic_len);
    if (topic == NULL) {
        cm_printf("[ALIYUN]: memory not enough\n");  
        return -1;
    }
    memset(topic, 0, topic_len);
    HAL_Snprintf(topic, topic_len, fmt, DEMO_PRODUCT_KEY, DEMO_DEVICE_NAME,DEMO_RRPC_SessionId);

    cm_printf("[ALIYUN]: example_publish_rrpc: %s",topic);


    res = IOT_MQTT_Publish_Simple(0, topic, IOTX_MQTT_QOS0, payload, strlen(payload));
    if (res < 0) {
        cm_printf("[ALIYUN]: publish failed, res = %d\n", res);
        HAL_Free(topic);
        return -1;
    }

    HAL_Free(topic);
    return 0;
}

 

Je suppose que tu aimes

Origine blog.csdn.net/qq_33259323/article/details/108965071
conseillé
Classement