NB-IoT NBIOT(BC 35、BC 26、BC 28)モジュール移動BC 35全網通アクセスOneNETプラットフォームMQTTプロトコルによるデータ伝送


ネット上の多くのNB-IOTモジュールの資料はLWM 2 M、COAPプロトコルを使ってonenetプラットフォームに接続している.現在、多くのNB-IOTモジュールがTCPプロトコルをサポートしているため、TCPプロトコルを使ってMQTTプロトコルを回してonenetプラットフォームに接続したいと思っているが、実験によって証明された.まず、Onenetプラットフォームへのアクセス方法を分析します.まず、そのデータフォーマットから分析を開始します.まず、バックグラウンドから3つの情報を取り出します.これを例に挙げます.認証情報:test(具体的には設定を参照)デバイスID:123456789製品ID:789123(具体的には自分のデバイスを参照)MQTTアクセスはすべて16進数のデータを送信します.では、私たちが送信するときはこのようなデータの列です.
0x10 0x24 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0xC0 0x00 0x78 0x00 0x09 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x39 0x00 0x07 0x37 0x38 0x39 0x31 0x32 0x33 0x20 0x00 0x04 0x74 0x65 0x73 0x74 
[ 0x10 ]   // MQTT  =1  DupFlag=0 QosLevel=0 Retain=0 
[ 0x22 ]   // remainedLength=34           0x00 04......0x74 0x65 0x73 0x74       ,        

[ 0x00 0x04 ]   // protocolNameLength=4       MQTT 4   ,   4.            
[ 0x4D 0x51 0x54 0x54 ]   // protocolName=MQTT 
[ 0x04 ]   // protocolLevel=4         
[ 0xC0 ]   // userFlag=1 passwordFlag=1 willFlag=0 willRetainFlag=0 willQosFlag=0 clenSessionFlag=0 clenSessionFlag=0         
[ 0x00 0x78 ]   // keepAlive=120            120S
[ 0x00 0x08]   // clientIdentifierLen=8     ID           
[ 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38 ]   // clientIdentifier=12345678   ID
[ 0x00 0x06 ]   // userNameLen=6     ID           
[ 0x37 0x38 0x39 0x31 0x32 0x33]   // userName=789123
[ 0x00 0x04 ]   // userPasswordLen=4                  
[ 0x74 0x65 0x73 0x74 ]   // userPassword=test

この中に穴があり、長さの16進数は10進数から16進数に変換されます.「MQTT」、test(具体的にはあなたが設定した)デバイスID:123456789製品ID:789123これらの情報は文字列が16進数に回転しているので、直接命令します.
AT 
OK 
AT+NRB//       ,               
AT+CMEE=1 
OK 
AT+CGSN=1 
+CGSN:867725030027605 
OK 
AT+NBAND? 
+NBAND:8 //     +NBAND:8,     +NBAND:5

OK 
AT+NBAND=8 //      ,      AT+NBAND=5 
OK 
AT+CIMI //     
460042437100213 
OK 
AT+CSQ //      ,    +CSQ:99,99         
+CSQ:29,99 
OK 
AT+NSOCR=STREAM,6,56000,1 // TCP socket     
AT+NSOCO=1,183.230.40.39,6002//     。6002        
OK

注意:NBがデータを送信する場合、データ内容を16進数に変換する必要があります.オンライン変換ツールを使用してデータを送信できるコマンドは、AT+NSOSD=1、送信内容の長さ、内容です.//注意長さは多くても少なくてもいけません
AT+NSOSD=1,36,102200044D51545404C00078000831323334353637380006373839313233000474657374
             ,         ,      
{"datastreams":[{"id":"temp","datapoints":[{"value":50}]}]}


しかし、データヘッダのようなフォーマットを追加する必要があります.
これは変換されたデータです.次はサーバへのデータの送信を開始します.
AT+NSOSD=1,69,3043000324647001003B7B226461746173747265616D73223A5B7B226964223A2274656D70222C2264617461706F696E7473223A5B7B2276616C7565223A35307D5D7D5D7D

データヘッダの内容:
3043000324647001003B

データヘッダの意味
30 // MQTT  =3  DupFlag=0 QosLevel=0 Retain=0 
43 //remainedLength=67              ,        16  
0003// TopicNameLen=3 
246470//TopicName=$dp 
01//    :    1:Json  1;     	
003B//       ,        


完全な手順
AT 
OK 
AT+NRB//       ,               
AT+CMEE=1 
OK 
AT+CGSN=1 
+CGSN:867725030027605 
OK 
AT+NBAND? 
+NBAND:8 //     +NBAND:8,     +NBAND:5

OK 
AT+NBAND=8 //      ,      AT+NBAND=5 
OK 
AT+CIMI //     
460042437100213 
OK 
AT+CSQ //      ,    +CSQ:99,99         
+CSQ:29,99 
OK 
AT+NSOCR=STREAM,6,56000,1 // TCP socket     
AT+NSOCO=1,183.230.40.33,6002//     。6002        
OK
AT+NSOSD=1,36,102200044D51545404C00078000831323334353637380006373839313233000474657374

OK 
+NSONMI:1,4//           。 
AT+NSORF=1,4//         203        。   , 
1,183.230.40.33,80,203,20200000,0

OK 
AT+NSOSD=1,69,3043000324647001003B7B226461746173747265616D73223A5B7B226964223A2274656D70222C2264617461706F696E7473223A5B7B2276616C7565223A35307D5D7D5D7D


C言語の16進関数を添付
int Str2Hex(char *str,char *hex)
{
        int high = 0;
        int low = 0;
        int temp = 0;

        if (NULL==str || NULL==hex){
                //printf("the str or hex is wrong
"); return -1; } if (0==strlen(str)){ //printf("the input str is wrong
"); return -2; } while(*str) { temp = (int)(*str); high = temp>>4; low = temp & 15; *hex = Value2Hex(high); hex++; *hex = Value2Hex(low); hex++; str++; } *hex = '\0'; return 0; }

MQTT接続サーバを送信するデータと送信データのフォーマット関数を添付
void ClearRAM(u8* ram,u32 n)
{
  u32 i;
  for (i = 0;i < n;i++)
  {
    ram[i] = 0x00;
  }
}
//  MQTT    
u16 mqtt_connect_message(char *mqtt_message,char *PROID,char *AUTH_INFO,char *DEVID)
{
//        char HTTP_Buf[400];     //HTTP     
        char str[500];
        char strHEX[500];
        u16 PROID_length = strlen(PROID);
        u16 DEVID_length = strlen(DEVID);
        u16 AUTH_INFO_length = strlen(AUTH_INFO);
        u16 MQTT_length = strlen("MQTT");
        u16 packetLen;
        u16 i,baseIndex;
        ClearRAM((u8*)str,200);   //  commandAT     ,      ip     
        ClearRAM((u8*)strHEX,200); //  locationHex     ,   hex          
        packetLen = 12;//        
        if(PROID_length > 0)
                packetLen = packetLen + 2 + PROID_length;
        if(DEVID_length > 0)
                packetLen = packetLen+ 2 + DEVID_length;
                if(AUTH_INFO_length > 0)
                packetLen = packetLen+ 2 + AUTH_INFO_length;
                
                strncpy((char*)(mqtt_message+strlen((char*)mqtt_message)),"10",2);
                sprintf(strHEX,"%02x",(packetLen-2));

                strcat(mqtt_message,strHEX);
                ClearRAM((u8*)str,200);   //  commandAT     ,      ip     
                ClearRAM((u8*)strHEX,200); //  locationHex     ,   hex          
                strcat(mqtt_message,"00044D51545404C00100");                
    //    ID                    
                sprintf(str, "%02x%02x",((0xff00&(DEVID_length))>>8),(0xff&DEVID_length));
                strcat(mqtt_message,str);
                ClearRAM((u8*)str,200);  
                sprintf(str, "%s",DEVID);
                Str2Hex((char*)str,(char*)strHEX);
                strcat(mqtt_message,strHEX);        
                ClearRAM((u8*)str,200); 
                ClearRAM((u8*)strHEX,200);
                 //    ID                    
                sprintf(str, "%02x%02x",((0xff00&(PROID_length))>>8),(0xff&PROID_length));
                strcat(mqtt_message,str);
                ClearRAM((u8*)str,200);  
                sprintf(str, "%s",PROID);
                Str2Hex((char*)str,(char*)strHEX);
                strcat(mqtt_message,strHEX);        
                ClearRAM((u8*)str,200); 
                ClearRAM((u8*)strHEX,200);
          //    ID                    
                sprintf(str, "%02x%02x",((0xff00&(AUTH_INFO_length))>>8),(0xff&AUTH_INFO_length));
                strcat(mqtt_message,str);
                ClearRAM((u8*)str,200);  
                sprintf(str, "%s",AUTH_INFO);
                Str2Hex((char*)str,(char*)strHEX);
                strcat(mqtt_message,strHEX);        
                ClearRAM((u8*)str,200); 
                ClearRAM((u8*)strHEX,200);
                Str2Hex((char*)str,(char*)strHEX);
                strcat(mqtt_message,strHEX);
                strcat(mqtt_message,"\r
"); return packetLen; } // MQTT u16 mqtt_SendData_message(char *mqtt_messageHEX,char *SendData,short length) { char str[200]; char strHEX[200]; u16 packetLen=length+8; u16 SendData_length = strlen(SendData); strncpy((char*)(mqtt_messageHEX+strlen((char*)mqtt_messageHEX)),"30",2); sprintf(strHEX,"%02x",(packetLen)); strcat(mqtt_messageHEX,strHEX); ClearRAM((u8*)str,200); // commandAT , ip ClearRAM((u8*)strHEX,200); // locationHex , hex strcat(mqtt_messageHEX,"01000324647001"); // json sprintf(str, "%02x%02x",((0xff00&(SendData_length))>>8),(0xff&SendData_length)); strcat(mqtt_messageHEX,str); ClearRAM((u8*)str,200); sprintf(str, "%s",SendData); Str2Hex((char*)str,(char*)strHEX); strcat(mqtt_messageHEX,strHEX); ClearRAM((u8*)str,200); ClearRAM((u8*)strHEX,200); return packetLen; }

これで終わりです.何か悪いところがあったら、MQTT ONEnetテストデバッグツールを指摘してください.https://www.amobbs.com/thread-5698272-1-1.htmlOnenetプラットフォームMQTTプロトコルパケット生成器:微信公衆番号「NNHPTCH」に注目し、南寧湖畔科学技術、「OnenetプラットフォームMQTTプロトコルパケット生成器」に返信
QQ群:
796415884
皆さんの交流を歓迎します!