老 姚
/
OnenetTest
example -connect to china mobile oneNet
main.cpp@0:674dfddde401, 2018-07-31 (annotated)
- Committer:
- yao6116601
- Date:
- Tue Jul 31 02:56:23 2018 +0000
- Revision:
- 0:674dfddde401
modular-2 connect to China Mobile OneNet IoT plateform
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yao6116601 | 0:674dfddde401 | 1 | #include "mbed.h" |
yao6116601 | 0:674dfddde401 | 2 | #include "BC95B.h" |
yao6116601 | 0:674dfddde401 | 3 | #define READ 0 |
yao6116601 | 0:674dfddde401 | 4 | #define WRITE 1 |
yao6116601 | 0:674dfddde401 | 5 | #define DISCOVER 2 |
yao6116601 | 0:674dfddde401 | 6 | DigitalOut myled(PC_6); |
yao6116601 | 0:674dfddde401 | 7 | BC95B oneNet(PB_6,PB_7,true); |
yao6116601 | 0:674dfddde401 | 8 | DigitalOut Enable(PD_13); |
yao6116601 | 0:674dfddde401 | 9 | DigitalOut RST(PD_12); |
yao6116601 | 0:674dfddde401 | 10 | double temperature=0.8; |
yao6116601 | 0:674dfddde401 | 11 | double min_value=0; |
yao6116601 | 0:674dfddde401 | 12 | double max_value=180; |
yao6116601 | 0:674dfddde401 | 13 | //Signal Strength And bit error rate |
yao6116601 | 0:674dfddde401 | 14 | int rssi,ber; |
yao6116601 | 0:674dfddde401 | 15 | unsigned char hex_char(char c) |
yao6116601 | 0:674dfddde401 | 16 | { |
yao6116601 | 0:674dfddde401 | 17 | if ('0' <= c && c <= '9') return (unsigned char)(c - '0'); |
yao6116601 | 0:674dfddde401 | 18 | if ('A' <= c && c <= 'F') return (unsigned char)(c - 'A' + 10); |
yao6116601 | 0:674dfddde401 | 19 | if ('a' <= c && c <= 'f') return (unsigned char)(c - 'a' + 10); |
yao6116601 | 0:674dfddde401 | 20 | // printf("Error Val=%d\n",c); |
yao6116601 | 0:674dfddde401 | 21 | return 0xFF; |
yao6116601 | 0:674dfddde401 | 22 | } |
yao6116601 | 0:674dfddde401 | 23 | double convertHextoDouble(char * buf,int len) |
yao6116601 | 0:674dfddde401 | 24 | { double result ; |
yao6116601 | 0:674dfddde401 | 25 | uint64_t temp; |
yao6116601 | 0:674dfddde401 | 26 | int i; |
yao6116601 | 0:674dfddde401 | 27 | |
yao6116601 | 0:674dfddde401 | 28 | temp=0; |
yao6116601 | 0:674dfddde401 | 29 | for (i=0;i<len;i++) |
yao6116601 | 0:674dfddde401 | 30 | temp=(uint64_t)(temp<<4)| hex_char(buf[i]); |
yao6116601 | 0:674dfddde401 | 31 | memcpy(&result,&temp,8); |
yao6116601 | 0:674dfddde401 | 32 | return result; |
yao6116601 | 0:674dfddde401 | 33 | } |
yao6116601 | 0:674dfddde401 | 34 | |
yao6116601 | 0:674dfddde401 | 35 | int readValue(int objId, int insId, int resId,char *ValueString) |
yao6116601 | 0:674dfddde401 | 36 | { |
yao6116601 | 0:674dfddde401 | 37 | int len; |
yao6116601 | 0:674dfddde401 | 38 | printf("read %d Value\n",resId); |
yao6116601 | 0:674dfddde401 | 39 | switch (resId) |
yao6116601 | 0:674dfddde401 | 40 | { |
yao6116601 | 0:674dfddde401 | 41 | case 5700:{len= sprintf(ValueString,"%0.1f",temperature);break;} |
yao6116601 | 0:674dfddde401 | 42 | case 5601:{len= sprintf(ValueString,"%0.1f",min_value);break;} |
yao6116601 | 0:674dfddde401 | 43 | case 5602:{len= sprintf(ValueString,"%0.1f",max_value);break;} |
yao6116601 | 0:674dfddde401 | 44 | } |
yao6116601 | 0:674dfddde401 | 45 | return len; |
yao6116601 | 0:674dfddde401 | 46 | } |
yao6116601 | 0:674dfddde401 | 47 | int writeValue(int objId, int insId, int resId,char *ValueString,int len) |
yao6116601 | 0:674dfddde401 | 48 | { |
yao6116601 | 0:674dfddde401 | 49 | double analog; |
yao6116601 | 0:674dfddde401 | 50 | analog=convertHextoDouble(ValueString,len); |
yao6116601 | 0:674dfddde401 | 51 | printf("write %d value \n",resId); |
yao6116601 | 0:674dfddde401 | 52 | switch(resId) |
yao6116601 | 0:674dfddde401 | 53 | { |
yao6116601 | 0:674dfddde401 | 54 | case 5700:{min_value=analog;} |
yao6116601 | 0:674dfddde401 | 55 | case 5601:{max_value=analog;} |
yao6116601 | 0:674dfddde401 | 56 | case 5602:{temperature=analog;} |
yao6116601 | 0:674dfddde401 | 57 | } |
yao6116601 | 0:674dfddde401 | 58 | |
yao6116601 | 0:674dfddde401 | 59 | return len; |
yao6116601 | 0:674dfddde401 | 60 | } |
yao6116601 | 0:674dfddde401 | 61 | // OneNet callback function |
yao6116601 | 0:674dfddde401 | 62 | void eventProcess() |
yao6116601 | 0:674dfddde401 | 63 | { int EventCode; |
yao6116601 | 0:674dfddde401 | 64 | int objId,insId,resId; |
yao6116601 | 0:674dfddde401 | 65 | long msgId; |
yao6116601 | 0:674dfddde401 | 66 | char ValueString[12]; |
yao6116601 | 0:674dfddde401 | 67 | int len; |
yao6116601 | 0:674dfddde401 | 68 | EventCode = oneNet.getEventCode(); |
yao6116601 | 0:674dfddde401 | 69 | //printf("event Processing %d\n",EventCode); |
yao6116601 | 0:674dfddde401 | 70 | switch(EventCode) |
yao6116601 | 0:674dfddde401 | 71 | { |
yao6116601 | 0:674dfddde401 | 72 | case READ:{ |
yao6116601 | 0:674dfddde401 | 73 | oneNet.getCurrentID(&msgId,&objId,&insId,&resId); |
yao6116601 | 0:674dfddde401 | 74 | len=readValue(objId, insId, resId,ValueString); |
yao6116601 | 0:674dfddde401 | 75 | oneNet.putCurrentValue(4,ValueString,len); |
yao6116601 | 0:674dfddde401 | 76 | break; |
yao6116601 | 0:674dfddde401 | 77 | } |
yao6116601 | 0:674dfddde401 | 78 | case WRITE:{ |
yao6116601 | 0:674dfddde401 | 79 | oneNet.getCurrentID(&msgId,&objId,&insId,&resId); |
yao6116601 | 0:674dfddde401 | 80 | len=oneNet.getCurrentValue(ValueString); |
yao6116601 | 0:674dfddde401 | 81 | |
yao6116601 | 0:674dfddde401 | 82 | writeValue(objId, insId, resId,ValueString,len); |
yao6116601 | 0:674dfddde401 | 83 | break; |
yao6116601 | 0:674dfddde401 | 84 | } |
yao6116601 | 0:674dfddde401 | 85 | case DISCOVER:{ |
yao6116601 | 0:674dfddde401 | 86 | // printf("Discover callback\n"); |
yao6116601 | 0:674dfddde401 | 87 | oneNet.getCurrentID(&msgId,&objId,&insId,&resId); |
yao6116601 | 0:674dfddde401 | 88 | // memcpy(ValueString,"5700:5601:5602",14); |
yao6116601 | 0:674dfddde401 | 89 | oneNet.putCurrentResNames(0,"5700;5601;5602",14); |
yao6116601 | 0:674dfddde401 | 90 | break; |
yao6116601 | 0:674dfddde401 | 91 | } |
yao6116601 | 0:674dfddde401 | 92 | } |
yao6116601 | 0:674dfddde401 | 93 | |
yao6116601 | 0:674dfddde401 | 94 | } |
yao6116601 | 0:674dfddde401 | 95 | |
yao6116601 | 0:674dfddde401 | 96 | int main() { |
yao6116601 | 0:674dfddde401 | 97 | int time_counter=0; |
yao6116601 | 0:674dfddde401 | 98 | const char * ss; |
yao6116601 | 0:674dfddde401 | 99 | int result; |
yao6116601 | 0:674dfddde401 | 100 | char temp[12]; |
yao6116601 | 0:674dfddde401 | 101 | Enable=1; |
yao6116601 | 0:674dfddde401 | 102 | RST=0; |
yao6116601 | 0:674dfddde401 | 103 | RST=1; |
yao6116601 | 0:674dfddde401 | 104 | printf("BC95B8 China Mobile ooneNet Demo \n"); |
yao6116601 | 0:674dfddde401 | 105 | temperature=0.8; |
yao6116601 | 0:674dfddde401 | 106 | oneNet.attach(&eventProcess); |
yao6116601 | 0:674dfddde401 | 107 | if(oneNet.reset()) |
yao6116601 | 0:674dfddde401 | 108 | printf("Rest OK\n"); |
yao6116601 | 0:674dfddde401 | 109 | wait(10); |
yao6116601 | 0:674dfddde401 | 110 | ss=oneNet.get_firmware_version(); |
yao6116601 | 0:674dfddde401 | 111 | printf("firmware version =%s\n",ss); |
yao6116601 | 0:674dfddde401 | 112 | ss=oneNet.get_imei(); |
yao6116601 | 0:674dfddde401 | 113 | printf("IMEI=%s\n",ss); |
yao6116601 | 0:674dfddde401 | 114 | ss=oneNet.get_imsi(); |
yao6116601 | 0:674dfddde401 | 115 | printf("IMSI=%s\n",ss); |
yao6116601 | 0:674dfddde401 | 116 | ss=oneNet.get_imsi(); |
yao6116601 | 0:674dfddde401 | 117 | printf("IMSI=%s\n",ss); |
yao6116601 | 0:674dfddde401 | 118 | oneNet.get_SignalStrength(&rssi,&ber); |
yao6116601 | 0:674dfddde401 | 119 | printf("signal strength: rssi=%d,ber=%d\n",rssi,ber); |
yao6116601 | 0:674dfddde401 | 120 | result=oneNet.create_suite(); |
yao6116601 | 0:674dfddde401 | 121 | printf("create communication suite=%d\n",result); |
yao6116601 | 0:674dfddde401 | 122 | |
yao6116601 | 0:674dfddde401 | 123 | // +MIPLADDOBJ:<ref>,<objId>,<insCount>,<insBitmap>,< attrCount>,<actCount> |
yao6116601 | 0:674dfddde401 | 124 | oneNet.create_object(result,3303,1,"1",3,0) ; //Attribute count=3 |
yao6116601 | 0:674dfddde401 | 125 | while(!oneNet.register_request(result,3600,600)) |
yao6116601 | 0:674dfddde401 | 126 | { |
yao6116601 | 0:674dfddde401 | 127 | wait(1); |
yao6116601 | 0:674dfddde401 | 128 | }; |
yao6116601 | 0:674dfddde401 | 129 | printf("register request OK\n"); |
yao6116601 | 0:674dfddde401 | 130 | // oneNet.respond_discover(0,msgid,1,19,"5850;5851;5706;5805"); |
yao6116601 | 0:674dfddde401 | 131 | |
yao6116601 | 0:674dfddde401 | 132 | while(1) { |
yao6116601 | 0:674dfddde401 | 133 | oneNet.recv(); |
yao6116601 | 0:674dfddde401 | 134 | wait(0.5); // 200 ms |
yao6116601 | 0:674dfddde401 | 135 | myled = !myled; // LED is OFF |
yao6116601 | 0:674dfddde401 | 136 | time_counter++; |
yao6116601 | 0:674dfddde401 | 137 | if (time_counter>10) |
yao6116601 | 0:674dfddde401 | 138 | { |
yao6116601 | 0:674dfddde401 | 139 | time_counter=0; |
yao6116601 | 0:674dfddde401 | 140 | |
yao6116601 | 0:674dfddde401 | 141 | temperature=temperature+1.5; |
yao6116601 | 0:674dfddde401 | 142 | if (temperature>20) temperature=-20; |
yao6116601 | 0:674dfddde401 | 143 | sprintf(temp,"%0.1f",temperature); |
yao6116601 | 0:674dfddde401 | 144 | oneNet.notify_resource(0,3303,0,5700,4,4,temp,0,0); |
yao6116601 | 0:674dfddde401 | 145 | } |
yao6116601 | 0:674dfddde401 | 146 | } |
yao6116601 | 0:674dfddde401 | 147 | } |