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
Le processus spécifique est le suivant:
- 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.
- 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.
- 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;
}