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