Show last authors
1 (% style="text-align:center" %)
2 [[image:1657509006180-251.png]]
3
4
5
6
7
8
9
10
11
12
13 **Table of Contents:**
14
15 {{toc/}}
16
17
18
19
20
21
22 = 1.  Introduction =
23
24 == 1.1 ​ What is NBSN95 NB-IoT Sensor Node ==
25
26
27 (((
28 NBSN95 is a Long Range NB-IoT Sensor Node. It is designed for (% style="color:blue" %)**outdoor data logging **(%%)and powered by (% style="color:blue" %)**Li/SOCl2 battery**(%%) for long term use and secure data transmission. It is designed to facilitate developers to quickly deploy industrial level NB-IoT solutions. It helps users to turn the idea into a practical application and make the Internet of Things a reality. It is easy to program, create and connect your things everywhere.
29
30
31 (% style="color:blue" %)**NarrowBand-Internet of Things (NB-IoT)**(%%) is a standards-based low power wide area (LPWA) technology developed to enable a wide range of new IoT devices and services. NB-IoT significantly improves the power consumption of user devices, system capacity and spectrum efficiency, especially in deep coverage.
32
33
34 NBSN95 uses STM32l0x chip from ST, STML0x is the (% style="color:blue" %)**ultra-low-power**(%%) STM32L072xx microcontrollers incorporate the connectivity power of the universal serial bus (USB 2.0 crystal-less) with the high-performance ARM® Cortex®-M0+ 32-bit RISC core operating at a 32 MHz frequency, a memory protection unit (MPU), high-speed embedded memories (192 Kbytes of Flash program memory, 6 Kbytes of data EEPROM and 20 Kbytes of RAM) plus an extensive range of enhanced I/Os and peripherals.
35
36
37 NBSN95 is an (% style="color:blue" %)**open source product**(%%), it is based on the STM32Cube HAL drivers and lots of libraries can be found in ST site for rapid development.
38 )))
39
40
41 [[image:1657509740279-435.png]]
42
43
44
45
46 == 1.2 ​ Features ==
47
48 * STM32L072CZT6 MCU
49 * NB-IoT Bands: B1/B3/B8/B5/B20/B28 @H-FDD
50 * Pre-load bootloader on USART1/USART2
51 * MDK-ARM Version 5.24a IDE
52 * I2C, LPUSART1, USB, SPI2
53 * 3x12bit ADC, 1x12bit DAC
54 * 20xDigital I/O
55 * Open-source hardware / software
56 * IP66 Waterproof Enclosure
57 * Ultra-Low Power consumption
58 * AT Commands to change parameters
59 * Micro SIM card slot for NB-IoT SIM
60 * 8500mAh Battery for long term use
61
62
63
64 == 1.3  Specification ==
65
66
67 (% style="color:#037691" %)**Micro Controller:**
68
69 * STM32L072CZT6 MCU
70 * MCU: STM32L072CZT6
71 * Flash: 192KB
72 * RAM: 20KB
73 * EEPROM: 6KB
74 * Clock Speed: 32Mhz
75
76 (% style="color:#037691" %)**Common DC Characteristics:**
77
78 * Supply Voltage: 2.1v ~~ 3.6v
79 * Operating Temperature: -40 ~~ 85°C
80 * I/O pins: Refer to STM32L072 datasheet
81
82 (% style="color:#037691" %)**NB-IoT Spec:**
83
84 * - B1 @H-FDD: 2100MHz
85 * - B3 @H-FDD: 1800MHz
86 * - B8 @H-FDD: 900MHz
87 * - B5 @H-FDD: 850MHz
88 * - B20 @H-FDD: 800MHz
89 * - B28 @H-FDD: 700MHz
90
91 (% style="color:#037691" %)**Battery:**
92
93 * Li/SOCI2 un-chargeable battery
94 * Capacity: 8500mAh
95 * Self Discharge: <1% / Year @ 25°C
96 * Max continuously current: 130mA
97 * Max boost current: 2A, 1 second
98
99 (% style="color:#037691" %)**Power Consumption**
100
101 * STOP Mode: 10uA @ 3.3v
102 * Max transmit power: [[350mA@3.3v>>mailto:350mA@3.3v]]
103
104
105
106 == ​1.4  Applications ==
107
108 * Smart Buildings & Home Automation
109 * Logistics and Supply Chain Management
110 * Smart Metering
111 * Smart Agriculture
112 * Smart Cities
113 * Smart Factory
114
115 (% class="wikigeneratedid" id="H200B1.5FirmwareChangelog" %)
116
117
118
119 == 1.5  Pin Definitions & Switch ==
120
121
122 [[image:1657510398618-181.png]]
123
124 (% border="1" cellspacing="10" style="background-color:#ffffcc; color:green; width:520px" %)
125 |=(% style="width: 30px;" %)**No.**|=(% style="width: 70px;" %)**Signal**|=(% style="width: 60px;" %)**Direction**|=(% style="width: 180px;" %)**Function**|=(% style="width: 180px;" %)**Remark**
126 |(% style="width:44px" %)1|(% style="width:86px" %)VCC(2.9V)|(% style="width:84px" %)OUTPUT|(% style="width:322px" %)VCC|(% style="width:296px" %)Directly connect to main power for board
127 |(% style="width:44px" %)2|(% style="width:86px" %)PA0|(% style="width:84px" %)In/Out|(% style="width:322px" %)Directly from STM32 chip|(% style="width:296px" %)Used as ADC in NBSN95 image
128 |(% style="width:44px" %)3|(% style="width:86px" %)PA1|(% style="width:84px" %)In/Out|(% style="width:322px" %)Directly from STM32 chip|(% style="width:296px" %)
129 |(% style="width:44px" %)4|(% style="width:86px" %)PA2|(% style="width:84px" %)In/Out|(% style="width:322px" %)Directly from STM32 chip, 10k pull up to VCC|(% style="width:296px" %)Used as UART_TXD in NBSN95 image
130 |(% style="width:44px" %)5|(% style="width:86px" %)PA3|(% style="width:84px" %)In/Out|(% style="width:322px" %)Directly from STM32 chip, 10k pull up to VCC|(% style="width:296px" %)Used as UART_RXD in NBSN95 image
131 |(% style="width:44px" %)6|(% style="width:86px" %)PB6|(% style="width:84px" %)In/Out|(% style="width:322px" %)Directly from STM32 chip, 10k pull up to VCC|(% style="width:296px" %)
132 |(% style="width:44px" %)7|(% style="width:86px" %)PB7|(% style="width:84px" %)In/Out|(% style="width:322px" %)Directly from STM32 chip, 10k pull up to VCC|(% style="width:296px" %)
133 |(% style="width:44px" %)8|(% style="width:86px" %)PB3|(% style="width:84px" %)In/Out|(% style="width:322px" %)Directly from STM32 chip, 10k pull up to VCC|(% style="width:296px" %)
134 |(% style="width:44px" %)9|(% style="width:86px" %)PB4|(% style="width:84px" %)In/Out|(% style="width:322px" %)Directly from STM32 chip|(% style="width:296px" %)
135 |(% style="width:44px" %)10|(% style="width:86px" %)PA9|(% style="width:84px" %)In/Out|(% style="width:322px" %)Directly from STM32 chip, 10k pull up to VCC|(% style="width:296px" %)
136 |(% style="width:44px" %)11|(% style="width:86px" %)PA10|(% style="width:84px" %)In/Out|(% style="width:322px" %)Directly from STM32 chip, 10k pull up to VCC|(% style="width:296px" %)
137 |(% style="width:44px" %)12|(% style="width:86px" %)GND|(% style="width:84px" %) |(% style="width:322px" %)Ground|(% style="width:296px" %)
138 |(% style="width:44px" %)13|(% style="width:86px" %)VCC(2.9V)|(% style="width:84px" %)OUTPUT|(% style="width:322px" %)VCC|(% style="width:296px" %)Directly connect to main power for board
139 |(% style="width:44px" %)14|(% style="width:86px" %)Jumper|(% style="width:84px" %) |(% style="width:322px" %)Power on/off jumper|(% style="width:296px" %)
140 |(% style="width:44px" %)15|(% style="width:86px" %)PA4|(% style="width:84px" %)In/Out|(% style="width:322px" %)Directly from STM32 chip|(% style="width:296px" %)
141 |(% style="width:44px" %)16|(% style="width:86px" %)NRST|(% style="width:84px" %)In|(% style="width:322px" %)Reset MCU|(% style="width:296px" %)
142 |(% style="width:44px" %)17|(% style="width:86px" %)PA12|(% style="width:84px" %)In/Out|(% style="width:322px" %)Directly from STM32 chip|(% style="width:296px" %)
143 |(% style="width:44px" %)18|(% style="width:86px" %)PA11|(% style="width:84px" %)In/Out|(% style="width:322px" %)Directly from STM32 chip|(% style="width:296px" %)
144 |(% style="width:44px" %)19|(% style="width:86px" %)PA14|(% style="width:84px" %)In/Out|(% style="width:322px" %)Directly from STM32 chip|(% style="width:296px" %)
145 |(% style="width:44px" %)20|(% style="width:86px" %)PB13|(% style="width:84px" %)In/Out|(% style="width:322px" %)Directly from STM32 chip|(% style="width:296px" %)
146 |(% style="width:44px" %)21|(% style="width:86px" %)PB12|(% style="width:84px" %)In/Out|(% style="width:322px" %)Directly from STM32 chip|(% style="width:296px" %)
147 |(% style="width:44px" %)22|(% style="width:86px" %)PB15|(% style="width:84px" %)In/Out|(% style="width:322px" %)Directly from STM32 chip|(% style="width:296px" %)
148 |(% style="width:44px" %)23|(% style="width:86px" %)PB14|(% style="width:84px" %)In/Out|(% style="width:322px" %)Directly from STM32 chip|(% style="width:296px" %)
149 |(% style="width:44px" %)24|(% style="width:86px" %)PA13|(% style="width:84px" %)In/Out|(% style="width:322px" %)Directly from STM32 chip|(% style="width:296px" %)
150 |(% style="width:44px" %)25|(% style="width:86px" %)PA8|(% style="width:84px" %)In/Out|(% style="width:322px" %)Directly from STM32 chip|(% style="width:296px" %)Default use to turn on/off LED1 in NBSN95 image
151 |(% style="width:44px" %)26|(% style="width:86px" %)GND|(% style="width:84px" %) |(% style="width:322px" %)Ground|(% style="width:296px" %)
152 |(% style="width:44px" %)27|(% style="width:86px" %)+5V|(% style="width:84px" %)Out|(% style="width:322px" %)5v output power|(% style="width:296px" %)Controlled by PB5(Low to Enable, High to Disable)
153 |(% style="width:44px" %)28|(% style="width:86px" %)LED1|(% style="width:84px" %) |(% style="width:322px" %)Controlled by PA8|(% style="width:296px" %)Blink on transmit
154 |(% style="width:44px" %)29|(% style="width:86px" %)BOOT MODE|(% style="width:84px" %) |(% style="width:322px" %)Configure device in working mode or ISP program mode|(% style="width:296px" %)(((
155 (((
156 Flash: Normal Working mode and send AT Commands
157 )))
158
159 (((
160 ISP: UART Program Mode
161 )))
162 )))
163 |(% style="width:44px" %)30|(% style="width:86px" %)NRST|(% style="width:84px" %)In|(% style="width:322px" %)Reset MCU|(% style="width:296px" %)
164
165
166
167 === 1.5.1 Jumper JP2 ===
168
169 Power on Device when put this jumper.
170
171
172 === 1.5.2 BOOT MODE / SW1 ===
173
174 (((
175 1) ISP: upgrade mode, device won't have any signal in this mode. but ready for upgrade firmware. LED won't work. Firmware won't run.
176 )))
177
178 (((
179 2) Flash: work mode, device starts to work and send out console output for further debug
180 )))
181
182
183 === 1.5.3 Reset Button ===
184
185 Press to reboot the device.
186
187
188 === 1.5.4 LED ===
189
190 It will flash:
191
192 1. When boot the device in flash mode
193 1. Send an uplink packet
194
195
196
197
198 == 1.6 Hole Option ==
199
200 The NBSN95 provides different hole size options for different size sensor cable. The options provided are M12, M16. The definition is as below:
201
202 [[image:image-20220711135811-1.png]]
203
204
205 [[image:1657519103007-447.png]]
206
207
208
209 = 2.  Use NBSN95 to communicate with IoT Server =
210
211 == 2.1  How it works ==
212
213 (((
214 The NBSN95 is equipped with a NB-IoT module, the pre-loaded firmware in NBSN95 will get environment data from sensors and send the value to local NB-IoT network via the NB-IoT module.  The NB-IoT network will forward this value to IoT server via the protocol defined by NBSN95.
215 )))
216
217
218 (((
219 The diagram below shows the working flow in default firmware of NBSN95:
220 )))
221
222 [[image:image-20220711135919-2.png]]
223
224
225
226 == 2.2 ​ Configure the NBSN95 ==
227
228
229 === 2.2.1  Power On NBSN95 ===
230
231 [[image:1657519498925-521.png]]
232
233
234 === 2.2.2  Test Requirement ===
235
236
237 (((
238 To use NBSN95 in your city, make sure meet below requirements:
239 )))
240
241 * Your local operator has already distributed a NB-IoT Network there.
242 * The local NB-IoT network used the band that NBSN95 supports.
243 * Your operator is able to distribute the data received in their NB-IoT network to your IoT server.
244
245 (((
246 Below figure shows our testing structure. Here we have NB-IoT network coverage by China Mobile, the band they use is B8.  The NBSN95 will use CoAP((% style="color:red" %)120.24.4.116:5683)(%%) or raw UDP((% style="color:red" %)120.24.4.116:5601)(%%) or MQTT((% style="color:red" %)120.24.4.116:1883)(%%)or TCP((% style="color:red" %)120.24.4.116:5600)(%%)protocol to send data to the test server
247 )))
248
249
250 [[image:1657519549982-889.png]]
251
252
253
254 === 2.2.3  Insert SIM card ===
255
256 (((
257 Insert the NB-IoT Card get from your provider.
258 )))
259
260 (((
261 User need to take out the NB-IoT module and insert the SIM card like below:
262 )))
263
264
265 [[image:1657249468462-536.png]]
266
267
268
269 === 2.2.4  Connect USB – TTL to NBSN95 to configure it ===
270
271 (((
272 (((
273 User need to configure NBSN95 via serial port to set the (% style="color:blue" %)**Server Address** / **Uplink Topic** (%%)to define where and how-to uplink packets. NBSN95 support AT Commands, user can use a USB to TTL adapter to connect to NBSN95 and use AT Commands to configure it, as below.
274 )))
275 )))
276
277 [[image:1657520237594-636.png]]
278
279
280 In the PC, use below serial tool settings:
281
282 * Baud:  (% style="color:green" %)**9600**
283 * Data bits:** (% style="color:green" %)8(%%)**
284 * Stop bits: (% style="color:green" %)**1**
285 * Parity:  (% style="color:green" %)**None**
286 * Flow Control: (% style="color:green" %)**None**
287
288 (((
289 Make sure the switch is in FLASH position, then power on device by connecting the jumper on NBSN95. NBSN95 will output system info once power on as below, we can enter the (% style="color:green" %)**password: 12345678**(%%) to access AT Command input.
290 )))
291
292 [[image:1657520459085-315.png]]
293
294 (((
295 (% style="color:red" %)Note: the valid AT Commands can be found at:  (%%)[[https:~~/~~/www.dragino.com/downloads/index.php?dir=NB-IoT/NBSN95/>>url:https://www.dragino.com/downloads/index.php?dir=NB-IoT/NBSN95/]]
296 )))
297
298
299
300 === 2.2.5  Use CoAP protocol to uplink data ===
301
302 (% style="color:red" %)Note: if you don't have CoAP server, you can refer this link to set up one: (%%)[[http:~~/~~/wiki.dragino.com/xwiki/bin/view/Main/Set%20up%20CoAP%20Server/>>http://wiki.dragino.com/xwiki/bin/view/Main/Set%20up%20CoAP%20Server/]]
303
304
305 **Use below commands:**
306
307 * (% style="color:blue" %)**AT+PRO=1**  (%%) ~/~/ Set to use CoAP protocol to uplink
308 * (% style="color:blue" %)**AT+SERVADDR=120.24.4.116,5683   ** (%%)~/~/ to set CoAP server address and port
309 * (% style="color:blue" %)**AT+URI=5,11,"mqtt",11,"coap",12,"0",15,"c=text1",23,"0" ** (%%) ~/~/Set COAP resource path
310
311 For parameter description, please refer to AT command set
312
313 [[image:1657249793983-486.png]]
314
315
316 After configure the server address and (% style="color:green" %)**reset the device**(%%) (via AT+ATZ ), NSE01 will start to uplink sensor values to CoAP server.
317
318 [[image:1657522754681-536.png]]
319
320
321
322 === 2.2.6  Use UDP protocol to uplink data(Default protocol) ===
323
324 This feature is supported since firmware version v1.0.1
325
326
327 * (% style="color:blue" %)**AT+PRO=2   ** (%%) ~/~/ Set to use UDP protocol to uplink
328 * (% style="color:blue" %)**AT+SERVADDR=120.24.4.116,5601   ** (%%) ~/~/ to set UDP server address and port
329 * (% style="color:blue" %)**AT+CFM=1       ** (%%) ~/~/If the server does not respond, this command is unnecessary
330
331 [[image:1657522829933-263.png]]
332
333
334 [[image:1657522854411-706.png]]
335
336
337
338 === 2.2.7  Use MQTT protocol to uplink data ===
339
340 (((
341 This feature is supported since firmware version v110, it supports only plain MQTT now it doesn't support TLS and other related encryption.
342 )))
343
344
345 * (% style="color:blue" %)**AT+PRO=3   ** (%%) ~/~/Set to use MQTT protocol to uplink
346 * (% style="color:blue" %)**AT+SERVADDR=120.24.4.116,1883   ** (%%) ~/~/Set MQTT server address and port
347 * (% style="color:blue" %)**AT+CLIENT=CLIENT       ** (%%)~/~/Set up the CLIENT of MQTT
348 * (% style="color:blue" %)**AT+UNAME=UNAME                               **(%%)~/~/Set the username of MQTT
349 * (% style="color:blue" %)**AT+PWD=PWD                                        **(%%)~/~/Set the password of MQTT
350 * (% style="color:blue" %)**AT+PUBTOPIC=T1_PUB                           **(%%)~/~/Set the sending topic of MQTT
351 * (% style="color:blue" %)**AT+SUBTOPIC=T1_SUB          **(%%) ~/~/Set the subscription topic of MQTT
352
353 [[image:1657522979257-629.png]]
354
355
356 [[image:1657522993615-517.png]]
357
358
359 (((
360 To save battery life, NBSN95 will establish a subscription before each uplink and close the subscription 3 seconds after uplink successful. Any downlink commands from server will only arrive during the subscription period.
361 )))
362
363
364 (((
365 MQTT protocol has a much higher power consumption compare vs UDP / CoAP protocol. Please check the power analyze document and adjust the uplink period to a suitable interval.
366 )))
367
368 (((
369
370 )))
371
372
373
374 === 2.2.8  Use TCP protocol to uplink data ===
375
376 This feature is supported since firmware version v110
377
378
379 * (% style="color:blue" %)**AT+PRO=4   ** (%%) ~/~/ Set to use TCP protocol to uplink
380 * (% style="color:blue" %)**AT+SERVADDR=120.24.4.116,5600   **(%%) ~/~/ to set TCP server address and port
381
382 [[image:1657523736162-303.png]]
383
384
385 [[image:1657523748549-241.png]]
386
387
388
389 === 2.2.9  Change Update Interval ===
390
391 User can use below command to change the (% style="color:green" %)**uplink interval**.
392
393 * (% style="color:blue" %)**AT+TDC=600      ** (%%)~/~/ Set Update Interval to 600s
394
395 (((
396
397 )))
398
399
400
401 == 2.3  Working Mode & Uplink Payload ==
402
403 (((
404 NBSN95 has different working mode for the connections of different type of sensors. This section describes these modes. User can use the AT Command (% style="color:blue" %)**AT+CFGMOD**(%%) to set NBSN95 to different working modes.
405 )))
406
407
408 (((
409 For example:
410 )))
411
412 (((
413 (% style="color:blue" %)**AT+CFGMOD=2     ** (%%) ~/~/** **will set the NBSN95 to work in [[MOD=2 distance mode>>||anchor="H"]] which target to measure distance via Ultrasonic Sensor.
414 )))
415
416
417 (((
418 The uplink payloads are composed in ASCII String. For example:
419 )))
420
421 (((
422 0a cd 00 ed 0a cc 00 00 ef 02 d2 1d (total 24 ASCII Chars). Representative the actually payload:
423 )))
424
425 (((
426 0x 0a cd 00 ed 0a cc 00 00 ef 02 d2 1d Total 12 bytes
427 )))
428
429
430 (((
431 (% style="color:red" %)**NOTE:**
432 )))
433
434 (((
435 (% style="color:red" %)1. All modes share the same Payload Explanation from [[HERE>>||anchor="H"]].
436 2. By default, the device will send an uplink message every 1 hour.
437 )))
438
439
440
441 === 2.3.1 CFGMOD~=1 (Default Mode) ===
442
443
444 In this mode, the uplink payload usually contains 25 bytes. ((% style="color:red" %)Note: Time stamp field are added since firmware version v120(%%))
445
446 (% border="1" cellspacing="8" style="background-color:#ffffcc; color:green; width:1071px" %)
447 |(((
448 **Size**
449
450 **(bytes)**
451 )))|(% style="width:82px" %)**6**|(% style="width:41px" %)(((
452 **2**
453
454
455 )))|(% style="width:46px" %)**2**|(% style="width:120px" %)**1**|(% style="width:55px" %)**1**|(% style="width:104px" %)**2**|(% style="width:159px" %)**1**|(% style="width:49px" %)**2**|(% style="width:104px" %)**2**|(% style="width:112px" %)**2**|(% style="width:94px" %)**4**
456 |**Value**|(% style="width:82px" %)[[Device ID>>||anchor="H"]]|(% style="width:41px" %)[[Ver>>||anchor="H"]]|(% style="width:46px" %)[[BAT>>||anchor="H"]]|(% style="width:120px" %)[[Signal Strength>>||anchor="H"]]|(% style="width:55px" %)(((
457 MOD
458
459 0x01
460 )))|(% style="width:104px" %)(((
461 [[Temperature>>||anchor="H"]]
462
463 [[(DS18B20)>>||anchor="H"]]
464 )))|(% style="width:159px" %)[[Digital in>>||anchor="H"]] & [[Interrupt>>||anchor="H"]]|(% style="width:49px" %)[[ADC>>||anchor="H"]]|(% style="width:104px" %)(((
465 [[Temperature>>||anchor="H"]]
466
467 by
468
469 SHT20/SHT31
470 )))|(% style="width:112px" %)(((
471 [[Humidity>>||anchor="H"]]
472
473 by
474
475 SHT20/SHT31
476 )))|(% style="width:94px" %)[[Timestamp>>||anchor="H"]]
477
478 If the cache upload mechanism is turned on, you will receive the payload shown in the figure below.
479
480
481 (% border="1" cellspacing="10" style="background-color:#ffffcc; color:green; width:523px" %)
482 |(% style="width:116px" %)**Frame header**|(% style="width:123px" %)**Frame data (1)**|(% style="width:121px" %)**Frame data (2)**|(% style="width:39px" %)**F…**|(% style="width:119px" %)**Frame data(X)**
483
484 (% style="color:red" %)**NOTE:**
485
486 (% style="color:red" %)**1. Only up to 10 sets of latest data will be cached.**
487
488 (% style="color:red" %)**2. Theoretically, the maximum upload bytes are 215.**
489
490
491 If we use the MQTT client to subscribe to this MQTT topic, we can see the following information when the NB sensor uplink data.
492
493 [[image:1657526816370-997.png]]
494
495
496 The payload is ASCII string, representative same HEX: 0x72403155615900780c541901000000004200fc023260da7c4e where:
497
498 * Device ID: 0x724031556159 = 724031556159
499 * Version: 0x0078=120=1.2.0
500
501 * BAT: 0x0c54 = 3156 mV = 3.156V
502 * Singal: 0x19 = 25
503 * Model: 0x01 = 1
504 * Temperature by DS18b20: 0x0000 = 0
505 * Interrupt: 0x00 = 0
506 * ADC: 0x0042 = 66 = 66mv
507 * Temperature by SHT20/SHT31: 0x00fc = 252 = 25.2 °C
508 * Humidity by SHT20/SHT31: 0x0232 = 562 = 56.2 %rh
509 * Timestamp: 0x60da7c4e = 1,624,931,406 = 2021-06-29 09:50:06
510
511 === 2.3.2 CFGMOD~=2 (Distance Mode) ===
512
513 This mode is target to measure the distance. Total 23 bytes, (Note: Time stamp field are added since firmware version v120)
514
515
516 (% border="1" cellspacing="8" style="background-color:#ffffcc; color:green; width:942px" %)
517 |=(% style="width: 104px;" %)**Size  (bytes)**|=(% style="width: 83px;" %)**6**|=(% style="width: 42px;" %)**2**|=(% style="width: 46px;" %)**2**|=(% style="width: 122px;" %)**1**|=(% style="width: 55px;" %)**1**|=(% style="width: 103px;" %)**2**|=(% style="width: 79px;" %)**1**|=(% style="width: 50px;" %)**2**|=(% style="width: 162px;" %)**2**|=(% style="width: 92px;" %)**4**
518 |(% style="width:104px" %)**Value**|(% style="width:83px" %)[[Device ID>>||anchor="H"]]|(% style="width:42px" %)[[Ver>>||anchor="H"]]|(% style="width:46px" %)[[BAT>>||anchor="H"]]|(% style="width:122px" %)[[Signal Strength>>||anchor="H"]]|(% style="width:55px" %)(((
519 MOD
520
521 0x02
522 )))|(% style="width:103px" %)(((
523 [[Temperature>>||anchor="H"]]
524
525 [[(DS18B20)>>||anchor="H"]]
526 )))|(% style="width:79px" %)(((
527 [[Digital in>>||anchor="H"]]
528
529 &
530
531 [[Interrupt>>||anchor="H"]]
532 )))|(% style="width:50px" %)[[ADC>>||anchor="H"]]|(% style="width:162px" %)(((
533 [[Distance measure>>||anchor="H"]] by:
534
535 1) [[LIDAR-Lite V3HP>>||anchor="H"]]
536
537 Or
538
539 2) [[Ultrasonic Sensor>>||anchor="H"]]
540 )))|(% style="width:92px" %)[[Timestamp>>||anchor="H"]]
541
542 If the cache upload mechanism is turned on, you will receive the payload shown in the figure below.
543
544
545 (% border="1" cellspacing="10" style="background-color:#ffffcc; color:green; width:512px" %)
546 |(% style="width:115px" %)**Frame header**|(% style="width:118px" %)**Frame data(1)**|(% style="width:116px" %)**Frame data(2)**|(% style="width:39px" %)**F…**|(% style="width:117px" %)**Frame data(X)**
547
548 (((
549 (% style="color:red" %)**NOTE:**
550 )))
551
552 (((
553 (% style="color:red" %)**1.    Only up to 10 sets of latest data will be cached.**
554 )))
555
556 (((
557 (% style="color:red" %)**2.    Theoretically, the maximum upload bytes are 193.**
558 )))
559
560
561 (((
562 If we use the MQTT client to subscribe to this MQTT topic, we can see the following information when the NB sensor uplink data.
563 )))
564
565
566 [[image:1657527383721-325.png]]
567
568
569 So the payload is 0x72403162907100780ca91102010b000ca8015860dacc87 where:
570
571 * Device ID: 0x724031629071 = 724031629071
572 * Version: 0x0078=120=1.2.0
573
574 * BAT: 0x0ca9 = 3241mV = 3.241 V
575 * Singal: 0x11 = 17
576 * Model: 0x02 = 2
577 * Temperature by DS18b20: 0x010b= 267 = 26.7  °C
578 * Interrupt: 0x00 = 0
579 * ADC: 0x0ca8 = 3240 mv
580 * Distance by LIDAR-Lite V3HP/Ultrasonic Sensor: 0x0158 = 344 cm
581 * Timestamp: 0x60dacc87 = 1,624,951,943 = 2021-06-29 15:32:23
582
583 Connection of LIDAR-Lite V3HP:
584
585 [[image:1657527422661-877.png]]
586
587
588 Connection to Ultrasonic Sensor:
589
590 [[image:1657527441108-781.png]]
591
592
593 === 2.3.3 CFGMOD~=3 (3 ADC + I2C) ===
594
595
596 This mode has total 26 bytes. Include 3 x ADC + 1x I2C, ((% style="color:red" %)Note: Time stamp field are added since firmware version v120(%%))
597
598
599 (% border="1" cellspacing="8" style="background-color:#ffffcc; color:green; width:1091px" %)
600 |=(% style="width: 99px;" %)(((
601 **Size (bytes)**
602 )))|=(% style="width: 83px;" %)6|=(% style="width: 42px;" %)**1**|=(% style="width: 44px;" %)**2**|=(% style="width: 122px;" %)**1**|=(% style="width: 56px;" %)**1**|=(% style="width: 56px;" %)**2**|=(% style="width: 160px;" %)**1**|=(% style="width: 57px;" %)**2**|=(% style="width: 104px;" %)**2**|=(% style="width: 109px;" %)**2**|=(% style="width: 57px;" %)**2**|=(% style="width: 93px;" %)**4**
603 |(% style="width:99px" %)**Value**|(% style="width:83px" %)[[Device ID>>||anchor="H"]]|(% style="width:42px" %)(((
604 [[Ver>>||anchor="H"]]
605
606
607
608 )))|(% style="width:44px" %)[[BAT>>||anchor="H"]]|(% style="width:122px" %)[[Signal Strength>>||anchor="H"]]|(% style="width:56px" %)(((
609 MOD
610
611 0x03
612 )))|(% style="width:56px" %)(((
613 [[ADC>>||anchor="H"]]1
614
615
616 )))|(% style="width:160px" %)[[Digital in>>||anchor="H"]] & [[Interrupt>>||anchor="H"]]|(% style="width:57px" %)(((
617 [[ADC>>||anchor="H"]]2
618
619
620 )))|(% style="width:104px" %)(((
621 [[Temperature>>||anchor="H"]]
622
623 by
624
625 SHT20/SHT31
626 )))|(% style="width:109px" %)(((
627 [[Humidity>>||anchor="H"]]
628
629 by
630
631 SHT20/SHT31
632 )))|(% style="width:57px" %)(((
633 [[ADC>>||anchor="H"]]3
634
635
636 )))|(% style="width:93px" %)[[Timestamp>>||anchor="H"]]
637
638 ADC1 uses pin PA0 to measure
639
640 ADC2 uses pin PA1 to measure
641
642 ADC3 uses pin PA4 to measure
643
644
645 If the cache upload mechanism is turned on, you will receive the payload shown in the figure below.
646
647
648 (% border="1" style="background-color:#ffffcc; color:green; width:510px" %)
649 |(% style="width:114px" %)**Frame header**|(% style="width:119px" %)**Frame data(1)**|(% style="width:118px" %)**Frame data(2)**|(% style="width:39px" %)**F…**|(% style="width:117px" %)**Frame data(X)**
650
651 (% style="color:red" %)**NOTE:**
652
653 (% style="color:red" %)**1.    Only up to 10 sets of latest data will be cached.**
654
655 (% style="color:red" %)**2.    Theoretically, the maximum upload bytes are 226.**
656
657
658 If we use the MQTT client to subscribe to this MQTT topic, we can see the following information when the NB sensor uplink data.
659
660 [[image:1657527751330-433.png]]
661
662
663 So the payload is 0x724031629071780cf012030cbc000cef010a024b0cef60dbc494 where:
664
665 * Device ID: 0x724031629071 = 724031629071
666 * Version: 0x78=120=1.2.0
667
668 * BAT: 0x0cf0 = 3312 mV = 3.312 V
669 * Singal: 0x12 = 18
670 * Model: 0x03 = 3
671 * ADC1: 0x0cbc= 3260mV
672 * Interrupt: 0x00 = 0
673 * ADC2: 0x0cef =3311 mv
674 * Temperature by SHT20/SHT31: 0x010a = 266 = 26.6 °C
675 * Humidity by SHT20/SHT31: 0x024b =587 = 58.7 %rh
676 * ADC2: 0x0cef = 3311 mv
677
678 * Timestamp: 0x60dbc494 = 1,625,015,444= 2021-06-30 09:10:44
679
680 === 2.3.4 CFGMOD~=4 (3 x DS18B20) ===
681
682
683 Hardware connection is as below, ((% style="color:red" %)Note: R3 & R4 should change from 10k to 4.7k to support DS18B20, Software set to AT+CFGMOD=4(%%))
684
685 [[image:1657527815194-570.png]]
686
687
688 This mode has total 25 bytes. ((% style="color:red" %)Note: Time stamp field are added since firmware version v120(%%)) As shown below:
689
690
691 (% border="1" cellspacing="8" style="background-color:#ffffcc; color:green; width:1127px" %)
692 |=(% style="width: 94px;" %)(((
693 **Size(bytes)**
694 )))|=(% style="width: 82px;" %)**6**|=(% style="width: 40px;" %)**2**|=(% style="width: 44px;" %)**2**|=(% style="width: 120px;" %)**1**|=(% style="width: 55px;" %)**1**|=(% style="width: 111px;" %)**2**|=(% style="width: 48px;" %)**2**|=(% style="width: 207px;" %)**1**|=(% style="width: 114px;" %)**2**|=(% style="width: 112px;" %)**2**|=(% style="width: 94px;" %)**4**
695 |(% style="width:94px" %)**Value**|(% style="width:82px" %)[[Device ID>>||anchor="H"]]|(% style="width:40px" %)[[Ver>>||anchor="H"]]|(% style="width:44px" %)[[BAT>>||anchor="H"]]|(% style="width:120px" %)[[Signal strength>>||anchor="H"]]|(% style="width:55px" %)(((
696 MOD
697
698 (0x04)
699 )))|(% style="width:111px" %)(((
700 [[Temperature1>>||anchor="H"]]
701
702 [[(DS18B20)>>||anchor="H"]]
703
704 [[(PB3)>>||anchor="H"]]
705 )))|(% style="width:48px" %)(((
706 [[ADC>>||anchor="H"]]
707
708
709 )))|(% style="width:207px" %)[[Digital in & Digital Interrupt>>||anchor="H"]]|(% style="width:114px" %)(((
710 [[Temperature2>>||anchor="H"]]
711
712 [[(DS18B20)>>||anchor="H"]]
713
714 [[(PA9)>>||anchor="H"]]
715 )))|(% style="width:112px" %)(((
716 [[Temperature3>>||anchor="H"]]
717
718 [[(DS18B20)>>||anchor="H"]]
719
720 [[(PA10)>>||anchor="H"]]
721 )))|(% style="width:94px" %)[[Timestamp>>||anchor="H"]]
722
723 If the cache upload mechanism is turned on, you will receive the payload shown in the figure below.
724
725
726 (% border="1" cellspacing="10" style="background-color:#ffffcc; color:green; width:538px" %)
727 |(% style="width:115px" %)**Frame header**|(% style="width:125px" %)**FFrame data(1)**|(% style="width:126px" %)**FFrame data(2)**|(% style="width:40px" %)**F…**|(% style="width:126px" %)**FFrame data(X)**
728
729 (% style="color:red" %)**NOTE:**
730
731 (% style="color:red" %)**1.    Only up to 10 sets of latest data will be cached.**
732
733 (% style="color:red" %)**2.    Theoretically, the maximum upload bytes is 215.**
734
735
736 If we use the MQTT client to subscribe to this MQTT topic, we can see the following information when the NB sensor uplink data.
737
738 [[image:1657528339054-727.png]]
739
740
741 So the payload is 0x72403162907100780cdf1504010a0cde0000fb010060dbcb3f  where:
742
743 * Device ID: 0x724031629071 = 724031629071
744 * Version: 0x0078=120=1.2.0
745
746 * BAT: 0x0cdf = 3295 mV = 3.295 V
747 * Singal: 0x15 = 21
748 * Model: 0x04 = 4
749 * Temperature by DS18b20: 0x010a = 226 = 22.6 °C
750 * ADC: 0x0cde = 3294 mv
751 * Interrupt: 0x00 = 0
752 * Temperature by DS18b20: 0x00fb = 251 = 25.1°C
753 * Temperature by DS18b20: 0x0100  = 256 = 25.6 °C
754
755 * Timestamp: 0x60dbcb3f = 1,625,017,151= 2021-06-30 09:39:11
756
757 === 2.3.5 CFGMOD~=5 (Weight Measurement by HX711) ===
758
759
760 [[image:1657528388617-253.png]]
761
762 (% style="color:red" %)Notes about hardware connection:
763
764 1. Don't connect the HX711 module VCC to NBSN95 3.3v VCC, in this case, the NBSN95 will always power on HX711 and the battery will run out soon.
765 1. HX711 support 5v VCC, but while connect the NBSN95's +5V to HX711 VCC, the value from HX711 is not stable.
766 1. Connect NBSN95 +5V to HX711 VCC via a LDO module is stable.
767
768 (% style="color:red" %)Each HX711 need to be calibrated before used. User need to do below two steps:
769
770 1. Zero calibration. Don’t put anything on load cell and run (% style="color:blue" %)**AT+WEIGRE**(%%) to calibrate to Zero gram.
771 1. Adjust calibration factor (default value 400): Put a known weight thing on load cell and run (% style="color:blue" %)**AT+WEIGAP**(%%) to adjust the Calibration Factor.
772
773 For example:
774
775 (% style="color:blue" %)**AT+WEIGAP =403.0**
776
777 Response:  Weight is 401 g
778
779
780 Check the response of this command and adjust the value to match the real value for thing.
781
782 This mode has total 23 bytes. (Note: Time stamp field are added since firmware version v120). As shown below:
783
784
785 (% border="1" cellspacing="8" style="background-color:#ffffcc; color:green; width:973px" %)
786 |=(% style="width: 97px;" %)(((
787 **Size(bytes)**
788 )))|=(% style="width: 83px;" %)**6**|=(% style="width: 42px;" %)**2**|=(% style="width: 46px;" %)**2**|=(% style="width: 121px;" %)**1**|=(% style="width: 60px;" %)**1**|=(% style="width: 104px;" %)**2**|=(% style="width: 50px;" %)**2**|=(% style="width: 206px;" %)**1**|=(% style="width: 69px;" %)**2**|=(% style="width: 92px;" %)**4**
789 |(% style="width:97px" %)**Value**|(% style="width:83px" %)[[Device ID>>||anchor="H"]]|(% style="width:42px" %)(((
790 [[Ver>>||anchor="H"]]
791
792
793 )))|(% style="width:46px" %)[[BAT>>||anchor="H"]]|(% style="width:121px" %)[[Signal strength>>||anchor="H"]]|(% style="width:60px" %)(((
794 MOD
795
796 (0x05)
797 )))|(% style="width:104px" %)(((
798 [[Temperature>>||anchor="H"]]
799
800 [[(DS18B20)>>||anchor="H"]]
801 )))|(% style="width:50px" %)[[ADC>>||anchor="H"]]|(% style="width:206px" %)[[Digital in & Digital Interrupt>>||anchor="H"]]|(% style="width:69px" %)[[Weight>>||anchor="H"]]|(% style="width:92px" %)[[Timestamp>>||anchor="H"]]
802
803 If the cache upload mechanism is turned on, you will receive the payload shown in the figure below.
804
805
806 (% border="1" style="background-color:#ffffcc; color:green; width:522px" %)
807 |(% style="width:116px" %)**Frame header**|(% style="width:122px" %)**Frame data (1)**|(% style="width:122px" %)**Frame data (2)**|(% style="width:41px" %)**F…**|(% style="width:118px" %)**Frame data(X)**
808
809 (% style="color:red" %)**NOTE:**
810
811 (% style="color:red" %)**1.    Only up to 10 sets of latest data will be cached.**
812
813 (% style="color:red" %)**2.    Theoretically, the maximum upload bytes are 193.**
814
815
816 If we use the MQTT client to subscribe to this MQTT topic, we can see the following information when the NB sensor uplink data.
817
818
819 [[image:1657528559833-164.png]]
820
821
822 So the payload is 0x72403162907100780c94140501370c9300003a60dbe59e where:
823
824 * Device ID: 0x724031629071 =724031629071
825 * Version: 0x0078=120=1.2.0
826
827 * BAT: 0x0c75 = 3220 mV = 3.220 V
828 * Singal: 0x14 = 20
829 * Model: 0x05 = 5
830 * Temperature by DS18b20: 0x0137 = 311 = 31.1 °C
831 * ADC: 0x0c74 = 3219 mv
832 * Interrupt: 0x00 = 0
833 * Weigt by HX711: 0x003a  = 58 g
834
835 * Timestamp: 0x60dbe59e = 1,625,023,902= 2021-06-30 11:31:42
836
837 === 2.3.6 CFGMOD~=6 (Counting mode) ===
838
839
840 In this mode, uplink payload includes in total 20 bytes, ((% style="color:red" %)Note: Time stamp field are added since firmware version v120(%%))
841
842
843 (% border="1" cellspacing="8" style="background-color:#ffffcc; color:green; width:638px" %)
844 |=(% style="width: 100px;" %)**Size (bytes)**|=(% style="width: 82px;" %)**6**|=(% style="width: 40px;" %)**2**|=(% style="width: 46px;" %)**2**|=(% style="width: 123px;" %)**1**|=(% style="width: 54px;" %)**1**|=(% style="width: 98px;" %)**4**|=(% style="width: 92px;" %)**4**
845 |(% style="width:100px" %)**Value**|(% style="width:82px" %)[[Device ID>>||anchor="H"]]|(% style="width:40px" %)[[Ver>>||anchor="H"]]|(% style="width:46px" %)[[BAT>>||anchor="H"]]|(% style="width:123px" %)[[Signal Strength>>||anchor="H"]]|(% style="width:54px" %)(((
846 MOD
847
848 0x06
849 )))|(% style="width:98px" %)Pulse count|(% style="width:92px" %)[[Timestamp>>||anchor="H"]]
850
851 If the cache upload mechanism is turned on, you will receive the payload shown in the figure below.
852
853
854 (% border="1" style="background-color:#ffffcc; color:green; width:518px" %)
855 |(% style="width:116px" %)**Frame header**|(% style="width:121px" %)**Frame data (1)**|(% style="width:121px" %)**Frame data (2)**|(% style="width:39px" %)**F…**|(% style="width:118px" %)**Frame data(X)**
856
857 (% style="color:red" %)**NOTE:**
858
859 (% style="color:red" %)**1.    Only up to 10 sets of latest data will be cached.**
860
861 (% style="color:red" %)**2.    Theoretically, the maximum upload bytes are 160.**
862
863
864 If we use the MQTT client to subscribe to this MQTT topic, we can see the following information when the NB sensor uplink data.
865
866
867 [[image:1657528693361-320.png]]
868
869 The payload is ASCII string, representative same HEX: 0x72403162907100780cc714060000000260dc03e5 where:
870
871 * Device ID: 0x724031629071 = 724031629071
872 * Version: 0x0078=120=1.2.0
873
874 * BAT: 0x0cc7 =3271mV =3.271V
875 * Singal: 0x14 = 20
876 * Model: 0x06 = 6
877 * Pulse count: 0x00000002= 2
878 * Timestamp: 0x60dc03e5 = 1,625,031,653= 2021-06-30 13:40:53
879
880 (% border="1" cellspacing="10" style="background-color:#ffffcc; color:green; width:510px" %)
881 |=(% style="width: 60px;" %)(((
882 **Size(bytes)**
883 )))|=(% style="width: 50px;" %)**6**|=(% style="width: 25px;" %)2|=(% style="width: 25px;" %)**2**|=(% style="width: 70px;" %)**1**|=(% style="width: 60px;" %)**2**|=(% style="width: 80px;" %)**2**|=(% style="width: 90px;" %)**2**|=(% style="width: 50px;" %)**1**
884 |(% style="width:97px" %)**Value**|(% style="width:83px" %)[[Device ID>>||anchor="H2.4.1A0A0DeviceID"]]|(% style="width:41px" %)[[Ver>>||anchor="H2.4.2A0VersionInfo"]]|(% style="width:46px" %)[[BAT>>||anchor="H2.4.3A0BatteryInfo"]]|(% style="width:123px" %)[[Signal Strength>>||anchor="H2.4.4A0SignalStrength"]]|(% style="width:108px" %)[[Soil Moisture>>||anchor="H2.4.5A0SoilMoisture"]]|(% style="width:133px" %)[[Soil Temperature>>||anchor="H2.4.6A0SoilTemperature"]]|(% style="width:159px" %)[[Soil Conductivity(EC)>>||anchor="H2.4.7A0SoilConductivity28EC29"]]|(% style="width:80px" %)[[Interrupt>>||anchor="H2.4.8A0DigitalInterrupt"]]
885
886 (((
887
888 )))
889
890
891 == 2.4  Payload Explanation and Sensor Interface ==
892
893
894 === 2.4.1  Device ID ===
895
896 (((
897 By default, the Device ID equal to the last 6 bytes of IMEI.
898 )))
899
900 (((
901 User can use (% style="color:blue" %)**AT+DEUI**(%%) to set Device ID
902 )))
903
904 (((
905 **Example:**
906 )))
907
908 (((
909 AT+DEUI=A84041F15612
910 )))
911
912 (((
913 The Device ID is stored in a none-erase area, Upgrade the firmware or run AT+FDR won't erase Device ID.
914 )))
915
916
917
918 === 2.4.2  Version Info ===
919
920 (((
921 (((
922 These bytes include the hardware and software version.
923 )))
924
925 (((
926 Higher byte: Specify hardware version: always 0x01 for NBSN95
927 )))
928
929 (((
930 Lower byte: Specify the software version: 0x6E=110, means firmware version 110
931 )))
932
933
934 (((
935 For example: 0x01 6E: this device is NBSN95 with firmware version 110.
936 )))
937 )))
938
939
940
941 === 2.4.3  Battery Info ===
942
943 (((
944 Ex1: 0x0B45 = 2885mV
945 )))
946
947 (((
948 Ex2: 0x0B49 = 2889mV
949 )))
950
951
952
953 === 2.4.4  Signal Strength ===
954
955 (((
956 NB-IoT Network signal Strength.
957 )))
958
959 (((
960 **Ex1: 0x1d = 29**
961 )))
962
963 (((
964 (% style="color:blue" %)**0**(%%)  -113dBm or less
965 )))
966
967 (((
968 (% style="color:blue" %)**1**(%%)  -111dBm
969 )))
970
971 (((
972 (% style="color:blue" %)**2...30**(%%) -109dBm... -53dBm
973 )))
974
975 (((
976 (% style="color:blue" %)**31**  (%%) -51dBm or greater
977 )))
978
979 (((
980 (% style="color:blue" %)**99**   (%%) Not known or not detectable
981 )))
982
983
984
985 === 2.4.5  Temperature (DS18B20) ===
986
987 If there is a DS18B20 connected to PB3 pin. The temperature will be uploaded in the payload.
988
989 More DS18B20 can check the [[3 DS18B20 mode>>path:#ds18b20_3]]
990
991
992 **Connection for one DS18B20**
993
994 [[image:image-20220711164131-3.jpeg]]
995
996
997 **Example**:
998
999 If payload is: 0x0105:  (0105 & FC00 == 0), temp = 0x0105 /10 = 26.1 degree
1000
1001 If payload is: 0xFF3F:  (FF3F & FC00 == 1) , temp = (0xFF3F - 65536)/10 = -19.3 degree.
1002
1003
1004
1005 === 2.4.6  Digital Input ===
1006
1007 The digital input is for pin PA12,
1008
1009 * When PA12 is high, the bit2 of this byte is 1.
1010 * When PA12 is low, the bit2 of this byte is 0.
1011
1012 (((
1013
1014 )))
1015
1016
1017
1018 === 2.4.7  Analogue Digital Converter (ADC) ===
1019
1020 The ADC monitors the voltage on the (% style="color:blue" %)**PA0**(%%) line, in mV. Max value is from 0v to BAT voltage
1021
1022
1023 Ex: 0x021F = 543mv,
1024
1025
1026 (% style="color:blue" %)**Example1:**(%%)  Reading a Liquid Level Sensor (Read a resistance value):
1027
1028 [[image:image-20220711164848-12.png]]
1029
1030
1031
1032 In the NBSN95, we can use PB4 and PA0 pin to calculate the resistance for the liquid level sensor. The bottom of this sensor equal to 0ohm and top position equals to 10kohm.
1033
1034
1035 (% style="color:blue" %)Steps:
1036
1037 1. Solder a 10K resistor between PA0 and VCC.
1038 1. Screw liquid level sensor's two pins to PA0 and PB4.
1039
1040 The equipment circuit is as below:
1041
1042 [[image:image-20220711164942-13.png]]
1043
1044
1045
1046 According to above diagram:
1047
1048 ([[image:image-20220711164435-6.png]]
1049
1050 So
1051
1052 [[image:image-20220711164435-7.png]]
1053
1054 [[image:image-20220711164435-8.png]] is the reading of ADC. So if ADC=0x05DC=0.9 v and VCC (BAT) is 2.9v
1055
1056
1057 The [[image:image-20220711164435-9.png]] 4.5K ohm
1058
1059 Since the buoy is linear resistance from 10 ~~ 70cm.
1060
1061
1062 The position of buoy is [[image:image-20220711164435-10.png]] , from the bottom of buoy
1063
1064 (((
1065
1066 )))
1067
1068 (((
1069
1070 )))
1071
1072 === 2.4.8  Digital Interrupt ===
1073
1074
1075 Digital Interrupt refers to pin PB14, and there are different trigger methods. When there is a trigger, the NBSN95 will send a packet to the server.
1076
1077
1078 **Example to use with door sensor**
1079
1080 The door sensor is shown at right. It is a two wire magnetic contact switch used for detecting the open/close status of doors or windows.
1081
1082 [[image:image-20220711165615-14.png]]
1083
1084 When the two pieces are close to each other, the 2 wire output will be short or open (depending on the type), while if the two pieces are away from each other, the 2 wire output will be the opposite status. So we can use NBSN95 interrupt interface to detect the status for the door or window.
1085
1086
1087 Below is the installation example:
1088
1089 Fix one piece of the magnetic sensor to the door and connect the two pins to NBSN95 as follows:
1090
1091 * One pin to NBSN95's PB14 pin
1092 * The other pin to NBSN95's VCC pin
1093
1094 Install the other piece to the door. Find a place where the two pieces will be close to each other when the door is closed. For this particular magnetic sensor, when the door is closed, the output will be short, and PB14 will be at the VCC voltage.
1095
1096
1097 Door sensors have two types:  NC (Normal close) and NO (Normal Open). The connection for both type sensors are the same. But the decoding for payload is reverse, user need to modify this in the IoT Server decoder.
1098
1099
1100 When door sensor is shorted, there will extra power consumption in the circuit, the extra current is 3v3/R14 = 3v2/1Mohm = 0.3uA which can be ignored.
1101
1102
1103 [[image:image-20220711165615-15.png]]
1104
1105
1106 The above photos shows the two parts of the magnetic switch fitted to a door.
1107
1108
1109 The software by default uses the falling edge on the signal line as an interrupt. We need to modify it to accept both the rising edge (0v ~-~-> VCC , door close) and the falling edge (VCC ~-~-> 0v , door open) as the interrupt.
1110
1111
1112 The command is:
1113
1114 (% style="color:blue" %)**AT+INTMOD=1     ** (%%) ~/~/(more info about INMOD please refer [[AT Command Manual>>url:http://www.dragino.com/downloads/index.php?dir=NB-IoT/NBSN50/]]).
1115
1116
1117 Below shows some screen captures in TTN:
1118
1119
1120 In MOD=1, user can use the (% style="color:blue" %)**Digital Input & Interrupt** (%%)byte to see the status for door open or close. The Decode is:
1121
1122
1123 * When PB14 is high, the bit8 of this byte is 1.
1124 * When PB14 is low, the bit8 of this byte is 0.
1125
1126 === 2.4.9  I2C Interface (SHT20) ===
1127
1128 The (% style="color:blue" %)**PB6(SDA)**(%%) and (% style="color:blue" %)**PB7(SCK)**(%%) are I2C interface. User can use these pins to connect to an I2C device and get the sensor data.
1129
1130
1131 There is an example to show how to use the I2C interface to connect to the SHT20 Temperature and Humidity Sensor. This is support in [[**AT+CFGMOD=1**>>||anchor="H"]]** (default value).**
1132
1133
1134 Hardware connection for SHT20 is as below: 
1135
1136
1137 [[image:image-20220711170438-16.jpeg]]
1138
1139
1140 The device will be able to get the I2C sensor data now and upload to IoT Server.
1141
1142
1143 [[image:image-20220711170438-17.png]]
1144
1145
1146 Convert the read byte to decimal and divide it by ten.
1147
1148
1149 (% style="color:blue" %)**Example:**
1150
1151 Temperature:  Read:00ec (H) = 236(D)  Value:  236 /10=23.6℃
1152
1153 Humidity:    Read:0295(H)=661(D)    Value:  661 / 10=66.1, So 66.1%
1154
1155
1156 If you want to use other I2C device, please refer the SHT20 part source code as reference.
1157
1158
1159 === 2.4.10  Distance Reading ===
1160
1161 Refer [[Ultrasonic Sensor section>>path:#Ultrasonic_Sensor]].
1162
1163
1164
1165 === 2.4.11  Ultrasonic Sensor ===
1166
1167 The NBSN95 firmware supports ultrasonic sensor (with AT+CFGMOD=2) such as SEN0208 from DF-Robot. This Fundamental Principles of this sensor can be found at this link: [[https:~~/~~/wiki.dfrobot.com/Weather_-_proof_Ultrasonic_Sensor_with_Separate_Probe_SKU~~_~~__SEN0208>>url:https://wiki.dfrobot.com/Weather_-_proof_Ultrasonic_Sensor_with_Separate_Probe_SKU___SEN0208]]
1168
1169
1170 The NBSN95 detects the pulse width of the sensor and converts it to mm output. The accuracy will be within 1 centimeter. The usable range (the distance between the ultrasonic probe and the measured object) is between 24cm and 600cm.
1171
1172
1173 The picture below shows the connection:
1174
1175
1176 [[image:image-20220711171223-18.jpeg]]
1177
1178
1179
1180 Connect to the NBSN95 and run [[(% class="wikiinternallink wikiinternallink wikiinternallink wikiinternallink" %)**AT+CFGMOD=2**>>path:#MOD2]](%%) to switch to ultrasonic mode (ULT).
1181
1182
1183 **Example:**
1184
1185 Distance:  Read:0155(Hex) = 3410(D)  Value:  3410 mm=341.0 cm
1186
1187 [[image:image-20220711171223-19.png]]
1188
1189
1190 You can see the serial output in ULT mode as below:
1191
1192
1193 [[image:image-20220711171223-20.png]]
1194
1195
1196
1197 === 2.4.12  ​+5V Output ===
1198
1199 (((
1200 NBSN95 will enable +5V output before all sampling and disable the +5v after all sampling. 
1201 )))
1202
1203
1204 (((
1205 The 5V output time can be controlled by AT Command.
1206 )))
1207
1208 (((
1209 (% style="color:blue" %)**AT+5VT=1000**
1210 )))
1211
1212 (((
1213 Means set 5V valid time to have 1000ms. So the real 5V output will actually have 1000ms + sampling time for other sensors.
1214 )))
1215
1216
1217
1218 === 2.4.13  Weigh Sensor HX711 ===
1219
1220 NBSN95 supports Weigh Sensor HX711. See [[this link>>path:#weight_sensor]] for instruction.
1221
1222
1223
1224 === 2.4.14  Timestamp ===
1225
1226 From the v1.2.0 version, the timestamp will be added after each upload link.
1227
1228
1229 The time of the timestamp is based on the time in time zone 0.
1230
1231 Such as: 0x60da837e = 1624933246 = 2021-06-29 2:20:46+32(Beijing time)
1232
1233
1234 User can get this time from link:  [[https:~~/~~/www.epochconverter.com/>>url:https://www.epochconverter.com/]] :
1235
1236 Below is the converter example
1237
1238 [[image:image-20220711171448-21.png]]
1239
1240
1241
1242 == 2.5  Downlink Payload ==
1243
1244 By default, NBSN95 prints the downlink payload to console port.
1245
1246 [[image:image-20220708133731-5.png]]
1247
1248
1249 (((
1250 (% style="color:blue" %)**Examples:**
1251 )))
1252
1253 (((
1254
1255 )))
1256
1257 * (((
1258 (% style="color:blue" %)**Set TDC**
1259 )))
1260
1261 (((
1262 If the payload=0100003C, it means set the END Node's TDC to 0x00003C=60(S), while type code is 01.
1263 )))
1264
1265 (((
1266 Payload:    01 00 00 1E    TDC=30S
1267 )))
1268
1269 (((
1270 Payload:    01 00 00 3C    TDC=60S
1271 )))
1272
1273 (((
1274
1275 )))
1276
1277 * (((
1278 (% style="color:blue" %)**Reset**
1279 )))
1280
1281 (((
1282 If payload = 0x04FF, it will reset the NBSN95
1283 )))
1284
1285
1286 * (% style="color:blue" %)**INTMOD**
1287
1288 (((
1289 Downlink Payload: 06000003, Set AT+INTMOD=3
1290 )))
1291
1292
1293
1294 == 2.6  ​Firmware Change Log ==
1295
1296 Download URL & Firmware Change log
1297
1298 [[https:~~/~~/www.dragino.com/downloads/index.php?dir=NB-IoT/NBSN95/Firmware/>>url:https://www.dragino.com/downloads/index.php?dir=NB-IoT/NBSN95/Firmware/]]
1299
1300
1301 Upgrade Instruction: [[Upgrade_Firmware>>||anchor="H5.1200BHowtoUpgradeFirmware"]]
1302
1303
1304
1305 == 2.7  Use VDD or +5V to Power External Sensor ==
1306
1307 User can use VDD or +5V to power external sensor.
1308 (% style="color:red" %)**Note:**
1309
1310 1. VDD is 2.5~~3.3v from the battery + diode, the VDD is always on, so when use VDD to power external sensor, make sure the sensor has a low power consumption in sleep mode ( less 50 uA) to get a long battery life.
1311 1. +5V output is only ON when sampling. And MCU will turn off it after sampling. So if sensor can support 5v, +5V out is the best choice. [[See here for more info>>path:#Output_5v]].
1312
1313 (% style="color:red" %)Note: Always test the actually current pass by the JP2 jumper when connect to a new type of sensor.
1314
1315
1316
1317 == 2.8  ​Battery Analysis ==
1318
1319 === 2.8.1  ​Battery Type ===
1320
1321
1322 (((
1323 The NBSN95 battery is a combination of an 8500mAh Li/SOCI2 Battery and a Super Capacitor. The battery is none-rechargeable battery type with a low discharge rate (<2% per year). This type of battery is commonly used in IoT devices such as water meter.
1324 )))
1325
1326
1327 (((
1328 The battery is designed to last for several years depends on the actually use environment and update interval. 
1329 )))
1330
1331
1332 (((
1333 The battery related documents as below:
1334 )))
1335
1336 * [[Battery Dimension>>http://www.dragino.com/downloads/index.php?dir=datasheet/Battery/ER26500/]]
1337 * [[Lithium-Thionyl Chloride Battery datasheet>>http://www.dragino.com/downloads/index.php?dir=datasheet/Battery/ER26500/]]
1338 * [[Lithium-ion Battery-Capacitor datasheet>>http://www.dragino.com/downloads/index.php?dir=datasheet/Battery/ER26500/]]
1339
1340 (((
1341 [[image:image-20220708140453-6.png]]
1342 )))
1343
1344
1345
1346 === 2.8.2  Power consumption Analyze ===
1347
1348 The file **DRAGINO_NBSN95-Power-Analyzer.pdf** from [[https:~~/~~/www.dragino.com/downloads/index.php?dir=NB-IoT/NBSN95/>>url:https://www.dragino.com/downloads/index.php?dir=NB-IoT/NBSN95/]] describes a detail measurement to analyze the power consumption in different case. User can use it for design guideline for their project.
1349
1350 (((
1351
1352 )))
1353
1354
1355 === 2.8.3  ​Battery Note ===
1356
1357 (((
1358 The Li-SICO battery is designed for small current / long period application. It is not good to use a high current, short period transmit method. The recommended minimum period for use of this battery is 5 minutes. If you use a shorter period time to transmit LoRa, then the battery life may be decreased.
1359 )))
1360
1361
1362
1363 === 2.8.4  Replace the battery ===
1364
1365
1366 (((
1367 You can change the battery in the NBSN95.The type of battery is not limited as long as the output is between 3v to 3.6v. On the main board, there is a diode (D1) between the battery and the main circuit. If you need to use a battery with less than 3.3v, please remove the D1 and shortcut the two pads of it so there won't be voltage drop between battery and main board.
1368 )))
1369
1370
1371 (((
1372 The default battery pack of NBSN95 includes a ER26500 plus super capacitor. If user can't find this pack locally, they can find ER26500 or equivalence without the SPC1520 capacitor, which will also work in most case. The SPC can enlarge the battery life for high frequency use (update period below 5 minutes).
1373 )))
1374
1375 (((
1376
1377 )))
1378
1379
1380
1381 = 3. ​ Access NB-IoT Module =
1382
1383 (((
1384 Users can directly access the AT command set of the NB-IoT module.
1385
1386 The AT Command set can refer the BC95-G AT Command: [[https:~~/~~/www.dragino.com/downloads/index.php?dir=datasheet/other_vendors/BC95-G/>>url:https://www.dragino.com/downloads/index.php?dir=datasheet/other_vendors/BC95-G/]]
1387
1388
1389 The AT Command set can refer the BC35-G AT Command: [[https:~~/~~/www.dragino.com/downloads/index.php?dir=datasheet/other_vendors/BC35-G/>>url:https://www.dragino.com/downloads/index.php?dir=datasheet/other_vendors/BC35-G/]]
1390 )))
1391
1392 [[image:1657531951422-179.png]]
1393
1394
1395
1396 = 4.  Using the AT Commands =
1397
1398 == 4.1  Access AT Commands ==
1399
1400 See this link for detail: [[https:~~/~~/www.dragino.com/downloads/index.php?dir=NB-IoT/NBSN95/>>url:https://www.dragino.com/downloads/index.php?dir=NB-IoT/NBSN95/]]
1401
1402
1403 AT+<CMD>?  : Help on <CMD>
1404
1405 AT+<CMD>         : Run <CMD>
1406
1407 AT+<CMD>=<value> : Set the value
1408
1409 AT+<CMD>=?  : Get the value
1410
1411
1412 (% style="color:#037691" %)**General Commands**(%%)      
1413
1414 AT  : Attention       
1415
1416 AT?  : Short Help     
1417
1418 ATZ  : MCU Reset    
1419
1420 AT+TDC  : Application Data Transmission Interval
1421
1422 AT+CFG  : Print all configurations
1423
1424 AT+CFGMOD           : Working mode selection
1425
1426 AT+INTMOD            : Set the trigger interrupt mode
1427
1428 AT+5VT  : Set extend the time of 5V power  
1429
1430 AT+PRO  : Choose agreement
1431
1432 AT+WEIGRE  : Get weight or set weight to 0
1433
1434 AT+WEIGAP  : Get or Set the GapValue of weight
1435
1436 AT+RXDL  : Extend the sending and receiving time
1437
1438 AT+CNTFAC  : Get or set counting parameters
1439
1440 AT+SERVADDR  : Server Address
1441
1442
1443 (% style="color:#037691" %)**COAP Management**      
1444
1445 AT+URI            : Resource parameters
1446
1447
1448 (% style="color:#037691" %)**UDP Management**
1449
1450 AT+CFM          : Upload confirmation mode (only valid for UDP)
1451
1452
1453 (% style="color:#037691" %)**MQTT Management**
1454
1455 AT+CLIENT               : Get or Set MQTT client
1456
1457 AT+UNAME  : Get or Set MQTT Username
1458
1459 AT+PWD                  : Get or Set MQTT password
1460
1461 AT+PUBTOPIC  : Get or Set MQTT publish topic
1462
1463 AT+SUBTOPIC  : Get or Set MQTT subscription topic
1464
1465
1466 (% style="color:#037691" %)**Information** 
1467
1468 AT+LDATA  : Get the last upload data
1469
1470 AT+CDP  : Read or Clear cached data(% style="color:#037691" %)       
1471
1472 AT+FDR  : Factory Data Reset
1473
1474 AT+PWORD  : Serial Access Password
1475
1476
1477
1478 = 5.  Developer Guide =
1479
1480
1481 == 5.1  Get and compile Software ==
1482
1483 NBSN95 is an open-source project, developer can compile their firmware for customized applications. User can get the source code from:
1484
1485 * Software Source Code: [[https:~~/~~/github.com/dragino/NBSN95>>url:https://github.com/dragino/NBSN95]]
1486 * Compile instruction:  [[http:~~/~~/wiki.dragino.com/xwiki/bin/view/Main/Firmware%20Compile%20Instruction%20~~-~~-%20STM32/>>http://wiki.dragino.com/xwiki/bin/view/Main/Firmware%20Compile%20Instruction%20--%20STM32/]]
1487 * Upgrade firmware instruction
1488
1489 See FAQ of this file.
1490
1491
1492 The project file is in: (% style="color:#4472c4" %)** NBSN95-95.v1.0.0\NBSN95-95.v1.0.0\MDK-ARM\NBSN95-95.v1.0.0.uvprojx**
1493
1494
1495
1496 == 5.2  Get hardware source ==
1497
1498 NBSN95 are the compose of two PCB modules:
1499
1500 1. Mother board:  [[LoRa ST Sensor node mother board>>url:https://github.com/dragino/Lora/tree/master/LSN50/v2.0]].
1501 1. NB-IoT Module: [[https:~~/~~/github.com/dragino/NB-IoT/tree/master/NB%20ST/BC95>>url:https://github.com/dragino/NB-IoT/tree/master/NB%20ST/BC95]]
1502
1503
1504 = ​6.  FAQ =
1505
1506 == 6.1 ​ How to Upgrade Firmware ==
1507
1508
1509 (((
1510 User can upgrade the firmware for 1) bug fix, 2) new feature release.
1511 )))
1512
1513 (((
1514 Please see this link for how to upgrade:  [[http:~~/~~/wiki.dragino.com/xwiki/bin/view/Main/Firmware%20Upgrade%20Instruction%20for%20STM32%20base%20products/#H2.HardwareUpgradeMethodSupportList>>http://wiki.dragino.com/xwiki/bin/view/Main/Firmware%20Upgrade%20Instruction%20for%20STM32%20base%20products/#H2.HardwareUpgradeMethodSupportList]]
1515 )))
1516
1517 (((
1518 (% style="color:red" %)Notice, NBSN95 and LSN50v2 share the same mother board. They use the same connection and method to update.
1519 )))
1520
1521
1522
1523
1524 = 7.  Trouble Shooting =
1525
1526 == 7.1  ​Connection problem when uploading firmware ==
1527
1528
1529 (((
1530 **Please see: **[[http:~~/~~/wiki.dragino.com/xwiki/bin/view/Main/Firmware%20Upgrade%20Instruction%20for%20STM32%20base%20products/#H3.3Troubleshooting>>url:http://wiki.dragino.com/xwiki/bin/view/Main/Firmware%20Upgrade%20Instruction%20for%20STM32%20base%20products/#H3.3Troubleshooting]]
1531 )))
1532
1533 (% class="wikigeneratedid" %)
1534 (((
1535
1536 )))
1537
1538
1539 == 7.2  AT Command input doesn't work ==
1540
1541 (((
1542 In the case if user can see the console output but can't type input to the device. Please check if you already include the (% style="color:green" %)**ENTER**(%%) while sending out the command. Some serial tool doesn't send (% style="color:green" %)**ENTER**(%%) while press the send key, user need to add ENTER in their string.
1543
1544
1545 )))
1546
1547
1548 = 8. ​ Order Info =
1549
1550 Part Number:
1551
1552 (% style="color:blue" %)**NBSN95-YY (Base on BC95-G)**
1553
1554 **or**
1555
1556 (% style="color:blue" %)**NBSN95A-YY(Base on BC35-G)**
1557
1558
1559 (% style="color:blue" %)**YY:**
1560
1561 * (% style="color:red" %)**12**(%%):  With M12 waterproof cable hole
1562 * (% style="color:red" %)**16**(%%):  With M16 waterproof cable hole
1563 * (% style="color:red" %)**NH**(%%): No Hole
1564
1565 = 9.  Packing Info =
1566
1567 (((
1568
1569
1570 (% style="color:#037691" %)**Package Includes**:
1571
1572 * NBSN95 NB-IoT Soil Moisture & EC Sensor x 1
1573 * External antenna x 1
1574 )))
1575
1576 (((
1577
1578
1579 (% style="color:#037691" %)**Dimension and weight**:
1580
1581
1582 * Device Size: 13.0 x 5 x 4.5 cm
1583 * Device Weight: 150g
1584 * Package Size / pcs : 14.0 x 8x 5 cm
1585 * Weight / pcs : 180g
1586 )))
1587
1588 (((
1589
1590
1591
1592
1593 )))
1594
1595 = 10.  Support =
1596
1597 * Support is provided Monday to Friday, from 09:00 to 18:00 GMT+8. Due to different timezones we cannot offer live support. However, your questions will be answered as soon as possible in the before-mentioned schedule.
1598 * Provide as much information as possible regarding your enquiry (product models, accurately describe your problem and steps to replicate it etc) and send a mail to [[support@dragino.com>>url:http://../../../../../../D:%5C%E5%B8%82%E5%9C%BA%E8%B5%84%E6%96%99%5C%E8%AF%B4%E6%98%8E%E4%B9%A6%5CLoRa%5CLT%E7%B3%BB%E5%88%97%5Csupport@dragino.com]]
Copyright ©2010-2022 Dragino Technology Co., LTD. All rights reserved
Dragino Wiki v2.0