Wiki source code of Point to Point Communication of LT-22222-L
Hide last authors
author | version | line-number | content |
---|---|---|---|
1.1 | 1 | {{box cssClass="floatinginfobox" title="**Contents**"}} | |
2 | {{toc/}} | ||
3 | {{/box}} | ||
4 | |||
4.2 | 5 | = **1. Overview** = | |
1.1 | 6 | ||
6.1 | 7 | ((( | |
1.1 | 8 | Shipped LT-22222-L is base on LoRaWAN protocol. We also develop a open source Point to Point LoRa protocol for LT-22222-L. The source code and hex file can be found at: | |
6.1 | 9 | ))) | |
1.1 | 10 | ||
6.1 | 11 | ((( | |
1.1 | 12 | [[Point to Point Software for LT-22222-L>>https://github.com/dragino/LT-22222-L]]. | |
6.1 | 13 | ))) | |
1.1 | 14 | ||
15 | == == | ||
16 | |||
4.2 | 17 | = **2. Features for this firmware** = | |
1.1 | 18 | ||
4.2 | 19 | ||
8.2 | 20 | == **2.1 Point To Point** == | |
4.2 | 21 | ||
12.2 | 22 | === **2.1.1 Overview** === | |
8.1 | 23 | ||
15.4 | 24 | ||
8.2 | 25 | [[image:image-20220602111219-1.png||height="472" width="972"]] | |
4.2 | 26 | ||
27 | |||
12.2 | 28 | === **2.2.2 Configure** === | |
4.2 | 29 | ||
15.3 | 30 | ||
4.3 | 31 | (% border="1" style="background-color:#f7faff; color:black; width:500px" %) | |
32 | |=**A's configuration**|=**B's configuration** | ||
33 | |AT+GROUPMOD=0|AT+GROUPMOD=0 | ||
34 | |AT+TXCHS=868700000|AT+TXCHS=869000000 | ||
35 | |AT+RXCHS=869000000|AT+RXCHS=868700000 | ||
36 | |AT+TRIG1=2,50|AT+TRIG1=2,50 | ||
37 | |AT+TRIG2=2,50|AT+TRIG2=2,50 | ||
38 | |AT+DI1TODO1=2|AT+DI1TODO1=2 | ||
39 | |AT+DI1TORO1=2|AT+DI1TORO1=2 | ||
40 | |AT+DI2TODO2=2 |AT+DI2TODO2=2 | ||
41 | |AT+DI2TORO2=2|AT+DI2TORO2=2 | ||
4.2 | 42 | ||
43 | |||
7.1 | 44 | ||
15.2 | 45 | === **2.2.3 Serial port display** === | |
12.2 | 46 | ||
15.2 | 47 | ||
12.2 | 48 | (% class="wikigeneratedid" %) | |
4.2 | 49 | [[image:image-20220602111219-2.png]] | |
50 | |||
51 | |||
12.2 | 52 | (% class="wikigeneratedid" %) | |
4.2 | 53 | [[image:image-20220602111219-3.png]] | |
54 | |||
12.2 | 55 | (% class="wikigeneratedid" %) | |
56 | If the sender does not get the ACK reply from the receiver, it will retransmit up to 4 times, each interval is 6 seconds, and the UplinkCounter of the retransmission will not increase. | ||
57 | |||
58 | |||
59 | == **2.2 Point To Mult-Point ** == | ||
60 | |||
15.2 | 61 | === **2.2.1 Overview** === | |
12.2 | 62 | ||
63 | |||
15.2 | 64 | [[image:1654152390874-192.png]] | |
12.2 | 65 | ||
66 | |||
15.2 | 67 | === **2.2.2 Configure** === | |
68 | |||
69 | |||
70 | (% style="color:#4f81bd" %)**Configuration of the TX group:** | ||
71 | |||
72 | AT+GROUPMOD=0,2 | ||
73 | |||
74 | AT+TXCHS=868700000 | ||
75 | |||
76 | AT+RXCHS=869000000 | ||
77 | |||
78 | AT+TRIG1=2,50 | ||
79 | |||
80 | AT+TRIG2=2,50 | ||
81 | |||
82 | AT+DI1TODO1=1 | ||
83 | |||
84 | AT+DI1TORO1=1 | ||
85 | |||
86 | AT+DI2TODO2=1 | ||
87 | |||
88 | AT+DI2TORO2=1 | ||
89 | |||
90 | |||
91 | (% style="color:#4f81bd" %)**Configuration for RX group number 1:** | ||
92 | |||
93 | AT+GROUPMOD=1,1 | ||
94 | |||
95 | AT+TXCHS=869000000 | ||
96 | |||
97 | AT+RXCHS=868700000 | ||
98 | |||
99 | |||
100 | (% style="color:#4f81bd" %)**Configuration for RX group number 2:** | ||
101 | |||
102 | AT+GROUPMOD=1,2 | ||
103 | |||
104 | AT+TXCHS=869000000 | ||
105 | |||
106 | AT+RXCHS=868700000 | ||
107 | |||
108 | |||
109 | === **2.2.3 Serial port display** === | ||
110 | |||
111 | |||
112 | [[image:image-20220602144747-1.png]] | ||
113 | |||
114 | |||
115 | [[image:image-20220602144747-2.png]] | ||
116 | |||
8.9 | 117 | ((( | |
15.2 | 118 | If the TX group does not receive all the ACK replies from the RX group, it will retransmit up to 4 times, each time interval is 30 seconds, and the retransmission UplinkCounter will not increase. | |
8.9 | 119 | ))) | |
4.2 | 120 | ||
8.2 | 121 | ||
15.2 | 122 | ||
123 | |||
8.2 | 124 | == **2.3 AT command** == | |
125 | |||
126 | |||
11.3 | 127 | ((( | |
8.6 | 128 | (% style="color:#037691" %)**ATZ** (%%)**: ** Trig a reset of the MCU | |
11.3 | 129 | ))) | |
8.2 | 130 | ||
11.3 | 131 | ((( | |
8.6 | 132 | (% style="color:#037691" %)**AT+FDR** (%%)**:** Reset Parameters to Factory Default, Keys Reserve | |
11.3 | 133 | ))) | |
8.2 | 134 | ||
11.3 | 135 | ((( | |
8.6 | 136 | (% style="color:#037691" %)**AT+FCU** (%%)**:** Get or Set the Frame Counter Uplink | |
11.3 | 137 | ))) | |
8.2 | 138 | ||
11.3 | 139 | ((( | |
8.6 | 140 | (% style="color:#037691" %)**AT+FCD** (%%)**:** Get or Set the Frame Counter Downlink | |
11.3 | 141 | ))) | |
8.2 | 142 | ||
11.3 | 143 | ((( | |
8.6 | 144 | (% style="color:#037691" %)**AT+TXP** (%%)**:** Get or Set the transmit power, the maximum is 20dBm (default is 14dBm) | |
11.3 | 145 | ))) | |
8.2 | 146 | ||
11.3 | 147 | ((( | |
8.8 | 148 | (% style="color:#037691" %)**AT+SYNC** (%%)**:** Get or Set the Sync word [1:0x34,0:0x12] (default is 1) | |
11.3 | 149 | ))) | |
8.2 | 150 | ||
11.3 | 151 | ((( | |
8.7 | 152 | (% style="color:#037691" %)**AT+PMB** (%%)**: **Get or Set the preamble (default:8) | |
11.3 | 153 | ))) | |
8.2 | 154 | ||
11.3 | 155 | ((( | |
8.6 | 156 | (% style="color:#037691" %)**AT+TXCHS **(%%)**:** Get or Set the transmit frequency of TX (default:868700000) | |
11.3 | 157 | ))) | |
8.2 | 158 | ||
11.3 | 159 | ((( | |
8.6 | 160 | (% style="color:#037691" %)**AT+TXSF **(%%)**:** Get or Set the spreading factor of TX (7 to 12) (default:12) | |
11.3 | 161 | ))) | |
8.2 | 162 | ||
11.3 | 163 | ((( | |
8.6 | 164 | (% style="color:#037691" %)**AT+RXCHS **(%%)**:** Get or Set the transmit frequency of RX (default:869000000) | |
11.3 | 165 | ))) | |
8.2 | 166 | ||
11.3 | 167 | ((( | |
8.6 | 168 | (% style="color:#037691" %)**AT+RXSF **(%%)**:** Get or Set the spreading factor of RX (7 to 12) (default:12) | |
11.3 | 169 | ))) | |
8.2 | 170 | ||
11.3 | 171 | ((( | |
9.2 | 172 | (% style="color:#037691" %)**AT+BW **(%%)**: **Get or Set the bandwidth [0:125khz,1:250khz,2:500khz] (default:0) | |
11.3 | 173 | ))) | |
8.2 | 174 | ||
11.3 | 175 | ((( | |
8.7 | 176 | (% style="color:#037691" %)**AT+CR **(%%)**: **Get or Set the coding rate [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8] (default:1) | |
11.3 | 177 | ))) | |
8.2 | 178 | ||
11.3 | 179 | ((( | |
8.6 | 180 | (% style="color:#037691" %)**AT+TDC **(%%)**:** Get or set the application data transmission interval in ms(default 10 minutes) | |
11.3 | 181 | ))) | |
8.2 | 182 | ||
11.3 | 183 | ((( | |
8.8 | 184 | (% style="color:#037691" %)**AT+VER **(%%)**:** Get firmware version number | |
11.3 | 185 | ))) | |
8.2 | 186 | ||
11.3 | 187 | ((( | |
9.2 | 188 | (% style="color:#037691" %)**AT+SEND **(%%)**: **Set Custom sent hex data | |
11.3 | 189 | ))) | |
8.2 | 190 | ||
11.3 | 191 | ((( | |
8.6 | 192 | (% style="color:#037691" %)**AT+GROUPMOD **(%%)**: **Set or Get the grouping mode of the device (default: 0) | |
11.3 | 193 | ))) | |
8.2 | 194 | ||
11.1 | 195 | ((( | |
11.3 | 196 | ((( | |
8.7 | 197 | (% style="color:#037691" %)**AT+GROUPID **(%%)**: **Set or Get the password for matching between TX group and RX group, which can be composed of numbers or characters (default: 12345678) | |
11.1 | 198 | ))) | |
11.3 | 199 | ))) | |
8.2 | 200 | ||
11.3 | 201 | ((( | |
8.6 | 202 | (% style="color:#037691" %)**AT+TRIG1 **(%%)**:** Set or Get the DI1 pin interrupt trigger mode (default 0,0) | |
11.3 | 203 | ))) | |
8.2 | 204 | ||
11.3 | 205 | ((( | |
8.7 | 206 | (% style="color:#037691" %)**AT+TRIG2 **(%%)**: **Set or Get the DI2 pin interrupt trigger mode (default 0,0) | |
11.3 | 207 | ))) | |
8.2 | 208 | ||
11.3 | 209 | ((( | |
8.7 | 210 | (% style="color:#037691" %)**AT+DI1TODO1 **(%%)**: **Set or get the mode in which DI1 maps to DO1 (default 0) | |
11.3 | 211 | ))) | |
8.2 | 212 | ||
11.3 | 213 | ((( | |
8.7 | 214 | (% style="color:#037691" %)**AT+DI1TORO1 **(%%)**: **Set or get the mode in which DI1 maps to RO1(default 0) | |
11.3 | 215 | ))) | |
8.2 | 216 | ||
11.3 | 217 | ((( | |
8.6 | 218 | (% style="color:#037691" %)**AT+DI2TODO2 **(%%)**:** Set or get the mode in which DI2 maps to DO2(default 0) | |
11.3 | 219 | ))) | |
8.2 | 220 | ||
11.3 | 221 | ((( | |
8.7 | 222 | (% style="color:#037691" %)**AT+DI2TORO2 **(%%)**: **Set or get the mode in which DI2 maps to RO2(default 0) | |
11.3 | 223 | ))) | |
8.2 | 224 | ||
11.3 | 225 | ((( | |
226 | |||
227 | ))) | ||
8.2 | 228 | ||
11.3 | 229 | ((( | |
230 | |||
231 | ))) | ||
8.2 | 232 | ||
11.3 | 233 | ((( | |
8.7 | 234 | (% style="color:#4f81bd" %)**Example 1:** | |
11.3 | 235 | ))) | |
8.2 | 236 | ||
11.3 | 237 | ((( | |
8.7 | 238 | **AT+SEND=01020304 **will send a payload of 01020304 | |
11.3 | 239 | ))) | |
8.2 | 240 | ||
11.3 | 241 | ((( | |
242 | |||
243 | ))) | ||
8.2 | 244 | ||
11.3 | 245 | ((( | |
8.7 | 246 | (% style="color:#4f81bd" %)**Example 2: ** | |
11.3 | 247 | ))) | |
8.2 | 248 | ||
11.3 | 249 | ((( | |
8.8 | 250 | **AT+TRIGx=a **Trigger directly without triggering time | |
11.3 | 251 | ))) | |
8.2 | 252 | ||
11.3 | 253 | ((( | |
8.7 | 254 | **AT+TRIGx=a,b** | |
11.3 | 255 | ))) | |
8.2 | 256 | ||
11.3 | 257 | ((( | |
8.7 | 258 | a=0: falling edge; | |
11.3 | 259 | ))) | |
8.2 | 260 | ||
11.3 | 261 | ((( | |
8.7 | 262 | a=1: rising edge; | |
11.3 | 263 | ))) | |
8.2 | 264 | ||
11.3 | 265 | ((( | |
8.7 | 266 | a=2: falling edge or rising edge; | |
11.3 | 267 | ))) | |
8.2 | 268 | ||
11.3 | 269 | ((( | |
8.7 | 270 | b: triggering time in milliseconds. | |
11.3 | 271 | ))) | |
8.2 | 272 | ||
11.3 | 273 | ((( | |
8.7 | 274 | AT+TRIGx=2,50 Falling edge or rising edge trigger, and the trigger time exceeds 50ms. | |
11.3 | 275 | ))) | |
8.2 | 276 | ||
11.3 | 277 | ((( | |
278 | |||
279 | ))) | ||
8.2 | 280 | ||
11.3 | 281 | ((( | |
8.7 | 282 | (% style="color:#4f81bd" %)**Example 3: ** | |
11.3 | 283 | ))) | |
8.2 | 284 | ||
11.3 | 285 | ((( | |
8.7 | 286 | **AT+DI1TODO1= maps value** | |
11.3 | 287 | ))) | |
8.2 | 288 | ||
11.3 | 289 | ((( | |
8.7 | 290 | **AT+DI1TORO1= maps value** | |
11.3 | 291 | ))) | |
8.2 | 292 | ||
11.3 | 293 | ((( | |
8.7 | 294 | **AT+DI2TODO2= maps value** | |
11.3 | 295 | ))) | |
8.2 | 296 | ||
11.3 | 297 | ((( | |
8.7 | 298 | **AT+DI2TORO2= maps value** | |
11.3 | 299 | ))) | |
8.7 | 300 | ||
11.3 | 301 | ((( | |
302 | |||
303 | ))) | ||
8.7 | 304 | ||
8.4 | 305 | (% border="1" style="background-color:#f7faff; color:black; width:706px" %) | |
11.3 | 306 | |=(% style="width: 102px;" %)((( | |
307 | Maps value | ||
308 | )))|=(% style="width: 331px;" %)((( | ||
309 | DIx to DOx | ||
310 | )))|=(% style="width: 268px;" %)((( | ||
311 | DIx to ROx | ||
312 | ))) | ||
313 | |(% style="width:102px" %)((( | ||
314 | 0 | ||
315 | )))|(% style="width:331px" %)((( | ||
316 | No Action | ||
317 | )))|(% style="width:268px" %)((( | ||
318 | No Action | ||
319 | ))) | ||
320 | |(% style="width:102px" %)((( | ||
321 | 1 | ||
322 | )))|(% style="width:331px" %)((( | ||
323 | If DIx is high, control DOx to output low level, If DIx is low, control DOx to output high level | ||
324 | )))|(% style="width:268px" %)((( | ||
325 | ((( | ||
8.2 | 326 | If DIx is high, control ROx to close, | |
11.3 | 327 | ))) | |
8.2 | 328 | ||
11.3 | 329 | ((( | |
8.2 | 330 | if DIx is low, control ROx to open | |
331 | ))) | ||
11.3 | 332 | ))) | |
333 | |(% style="width:102px" %)((( | ||
334 | 2 | ||
335 | )))|(% style="width:331px" %)((( | ||
336 | If DIx is high, control DOx to output high level, If DIx is low, control DOx to output low level | ||
337 | )))|(% style="width:268px" %)((( | ||
338 | ((( | ||
8.2 | 339 | If DIx is high, control ROx to open, | |
11.3 | 340 | ))) | |
8.2 | 341 | ||
11.3 | 342 | ((( | |
8.2 | 343 | if DIx is low, control ROx to close | |
344 | ))) | ||
11.3 | 345 | ))) | |
346 | |(% style="width:102px" %)((( | ||
347 | 3 | ||
348 | )))|(% style="width:331px" %)((( | ||
349 | DOx state flip | ||
350 | )))|(% style="width:268px" %)((( | ||
351 | ROx state flip | ||
352 | ))) | ||
8.2 | 353 | ||
11.3 | 354 | ((( | |
8.7 | 355 | (% style="color:#4f81bd" %)**Example 4: ** | |
11.3 | 356 | ))) | |
8.2 | 357 | ||
11.3 | 358 | ((( | |
8.7 | 359 | **AT+GROUPMOD=0** Set to point to point mode | |
11.3 | 360 | ))) | |
8.2 | 361 | ||
11.3 | 362 | ((( | |
8.7 | 363 | **AT+GROUPMOD=0,aa** Set the TX group that controls the number of aa (The maximum value of aa is 8) | |
11.3 | 364 | ))) | |
8.2 | 365 | ||
11.1 | 366 | ((( | |
11.3 | 367 | ((( | |
8.7 | 368 | **AT+GROUPMOD=1,bb** Set to the RX group controlled by the TX group, numbered bb(The maximum value of aa is 8) | |
11.1 | 369 | ))) | |
11.3 | 370 | ))) | |
8.2 | 371 | ||
11.3 | 372 | ((( | |
8.7 | 373 | **AT+GROUPMOD=0,2** Set to control the TX group of the two RX groups | |
11.3 | 374 | ))) | |
8.2 | 375 | ||
11.3 | 376 | ((( | |
8.7 | 377 | **AT+GROUPMOD=1,1** Set the RX group numbered 1 | |
11.3 | 378 | ))) | |
8.2 | 379 | ||
11.3 | 380 | ((( | |
8.7 | 381 | **AT+GROUPMOD=1,2** Set the RX group numbered 2 | |
11.3 | 382 | ))) | |
8.2 | 383 | ||
384 | |||
385 | == **2.4 Data Format** == | ||
386 | |||
11.3 | 387 | ((( | |
8.2 | 388 | 8 bytes of GROUPID + 9 bytes of payload + 4 bytes of checksum | |
11.3 | 389 | ))) | |
8.2 | 390 | ||
11.3 | 391 | ((( | |
392 | |||
393 | ))) | ||
8.2 | 394 | ||
11.3 | 395 | ((( | |
8.8 | 396 | (% style="color:#4f81bd" %)**Payload:** | |
11.3 | 397 | ))) | |
8.2 | 398 | ||
8.4 | 399 | (% border="1" style="background-color:#f7faff; color:black; width:938px" %) | |
11.3 | 400 | |=(% style="width: 123px;" %)((( | |
401 | **Size (bytes)** | ||
402 | )))|=(% style="width: 107px;" %)((( | ||
403 | 1 | ||
404 | )))|=(% style="width: 107px;" %)((( | ||
405 | 1 | ||
406 | )))|=(% style="width: 107px;" %)((( | ||
407 | 1 | ||
408 | )))|=(% style="width: 107px;" %)((( | ||
409 | 1 | ||
410 | )))|=(% style="width: 107px;" %)((( | ||
411 | 1 | ||
412 | )))|=(% style="width: 107px;" %)((( | ||
413 | 1 | ||
414 | )))|=(% style="width: 107px;" %)((( | ||
415 | 1 | ||
416 | )))|=(% style="width: 107px;" %)((( | ||
417 | 1 | ||
418 | )))|=(% style="width: 107px;" %)((( | ||
419 | 1 | ||
420 | ))) | ||
421 | |(% style="width:123px" %)((( | ||
422 | **Value** | ||
423 | )))|(% style="width:38px" %)((( | ||
424 | address | ||
425 | )))|(% style="width:70px" %)((( | ||
426 | request | ||
427 | )))|(% style="width:52px" %)((( | ||
428 | ACK | ||
429 | )))|(% style="width:127px" %)((( | ||
430 | ((( | ||
8.2 | 431 | DI1& | |
11.3 | 432 | ))) | |
8.2 | 433 | ||
11.3 | 434 | ((( | |
8.2 | 435 | DI1 level | |
11.3 | 436 | ))) | |
437 | )))|(% style="width:101px" %)((( | ||
438 | DI1TODO1 | ||
439 | )))|(% style="width:91px" %)((( | ||
440 | DI1TORO1 | ||
441 | )))|(% style="width:111px" %)((( | ||
442 | ((( | ||
8.2 | 443 | DI2& | |
11.3 | 444 | ))) | |
8.2 | 445 | ||
11.3 | 446 | ((( | |
8.2 | 447 | DI2 level | |
11.3 | 448 | ))) | |
449 | )))|(% style="width:105px" %)((( | ||
450 | DI2TODO2 | ||
451 | )))|(% style="width:106px" %)((( | ||
452 | DI2TORO2 | ||
453 | ))) | ||
8.2 | 454 | ||
11.3 | 455 | ((( | |
8.5 | 456 | (% style="color:#037691" %)**The first byte**(%%)**:** 00 is the broadcast address, 01-08 is the RX group number. | |
11.3 | 457 | ))) | |
8.2 | 458 | ||
11.3 | 459 | ((( | |
8.5 | 460 | (% style="color:#037691" %)**The second byte**(%%)**:** send mapping request when not 0, not request when it is 0. | |
11.3 | 461 | ))) | |
8.2 | 462 | ||
11.3 | 463 | ((( | |
8.5 | 464 | (% style="color:#037691" %)**The third byte**(%%)**:** ACK returned to the sender after the mapping is completed. | |
11.3 | 465 | ))) | |
8.2 | 466 | ||
11.1 | 467 | ((( | |
11.3 | 468 | ((( | |
8.5 | 469 | (% style="color:#037691" %)**The fourth byte**(%%)**:** the high four bits are 1 to represent DI1, and the low four bits are the level of DI1 when the interrupt is triggered. | |
11.1 | 470 | ))) | |
11.3 | 471 | ))) | |
8.2 | 472 | ||
11.3 | 473 | ((( | |
8.6 | 474 | (% style="color:#037691" %)**The Fifth byte**(%%)**: **DI1TODO1 when the interrupt is triggered, 0 when the interrupt is not triggered. | |
11.3 | 475 | ))) | |
8.2 | 476 | ||
11.3 | 477 | ((( | |
8.5 | 478 | (% style="color:#037691" %)**The Sixth byte**(%%)**:** 0 does not trigger interrupt when DI1TORO1 interrupt is triggered. | |
11.3 | 479 | ))) | |
8.2 | 480 | ||
11.1 | 481 | ((( | |
11.3 | 482 | ((( | |
8.5 | 483 | (% style="color:#037691" %)**The seventh byte**(%%)**:** the high four bits are 2 to represent DI2, and the low four bits are the level of DI2 when the interrupt is triggered. | |
11.1 | 484 | ))) | |
11.3 | 485 | ))) | |
8.2 | 486 | ||
11.3 | 487 | ((( | |
8.6 | 488 | (% style="color:#037691" %)**The 8th byte**(%%)**: **DI2TODO2 when the interrupt is triggered, 0 when the interrupt is not triggered. | |
11.3 | 489 | ))) | |
8.2 | 490 | ||
11.3 | 491 | ((( | |
8.5 | 492 | (% style="color:#037691" %)**The 9th byte**(%%)**:** DI2TORO2 when an interrupt is triggered, 0 when an interrupt is not triggered. | |
11.3 | 493 | ))) | |
8.2 | 494 | ||
1.1 | 495 |