EP-0105: Difference between revisions

From 52Pi Wiki
Jump to navigation Jump to search
Line 74: Line 74:


===Register Map===
===Register Map===
*  Lora instruction section:
{| class="wikitable" style="text-align: center;"
1) The 0x22 register is used to configure the parameters of the Lara.
|-
  After the register is written, it needs to write 1 at the corresponding position of the 0×23 register to make the setting take effect.<br>
!Register Address!! Function !! Value
2) The first 16 bytes of the module are used to store the data specific address 0x01-0x10 that the user wants to send, and the 16 byte space from 0x11-0x21 is used to store the data received by the user.
|-
| 0x01 || LORA_TX1 || Lora TX Buffer 1 - User Data
|-
| 0x02 || LORA_TX2 || Lora TX Buffer 2 - User Data
|-
| 0x03 || LORA_TX3 || Lora TX Buffer 3 - User Data
|-
| 0x04 || LORA_TX4 || Lora TX Buffer 4 - User Data
|-
| 0x05 || LORA_TX5 || Lora TX Buffer 5 - User Data
|-
| 0x06 || LORA_TX6 || Lora TX Buffer 6 - User Data
|-
| 0x07 || LORA_TX7 || Lora TX Buffer 7 - User Data
|-
| 0x08 || LORA_TX8 || Lora TX Buffer 8 - User Data
|-
| 0x09 || LORA_TX9 || Lora TX Buffer 9 - User Data
|-
| 0x0a || LORA_TX10 || Lora TX Buffer 10 - User Data
|-
| 0x0b || LORA_TX11 || Lora TX Buffer 11 - User Data
|-
| 0x0c || LORA_TX12 || Lora TX Buffer 12 - User Data
|-
| 0x0d || LORA_TX13 || Lora TX Buffer 13 - User Data
|-
| 0x0e || LORA_TX14 || Lora TX Buffer 14 - User Data
|-
| 0x0f || LORA_TX15 || Lora TX Buffer 15 - User Data
|-
| 0x10 || LORA_TX16 || Lora TX Buffer 16 - User Data
|-
| 0x11 || LORA_RX1 || Lora RX Buffer 1 - User Data
|-
| 0x12 || LORA_RX2 || Lora RX Buffer 2 - User Data
|-
| 0x13 || LORA_RX3 || Lora RX Buffer 3 - User Data
|-
| 0x14 || LORA_RX4 || Lora RX Buffer 4 - User Data
|-
| 0x15 || LORA_RX5 || Lora RX Buffer 5 - User Data
|-
| 0x16 || LORA_RX6 || Lora RX Buffer 6 - User Data
|-
| 0x17 || LORA_RX7 || Lora RX Buffer 7 - User Data
|-
| 0x18 || LORA_RX8 || Lora RX Buffer 8 - User Data
|-
| 0x19 || LORA_RX9 || Lora RX Buffer 9 - User Data
|-
| 0x1a || LORA_RX10 || Lora RX Buffer 10 - User Data
|-
| 0x1b || LORA_RX11 || Lora RX Buffer 11 - User Data
|-
| 0x1c || LORA_RX12 || Lora RX Buffer 12 - User Data
|-
| 0x1d || LORA_RX13 || Lora RX Buffer 13 - User Data
|-
| 0x1e || LORA_RX14 || Lora RX Buffer 14 - User Data
|-
| 0x1f || LORA_RX15 || Lora RX Buffer 15 - User Data
|-
| 0x20 || LORA_RX16 || Lora RX Buffer 16 - User Data
|-
|}
 
* 0x01 - 0x10 Write Only.
* 0x11 - 0x20 Read Only.
----
{| class="wikitable" style="height: 200px"
{| class="wikitable" style="height: 200px"
|-
|-
Line 95: Line 164:
! colspan="2" | Effective data ratio 1-4
! colspan="2" | Effective data ratio 1-4
|}
|}
* It is recommended to keep the default unless you know the meaning of the LORA parameter.
----
----
{| class="wikitable" style="height: 200px"
{| class="wikitable" style="height: 200px"
Line 103: Line 174:
|Default Value || 0 || 0 ||  0 || 0 ||  0 ||  0 ||  0 ||  0  
|Default Value || 0 || 0 ||  0 || 0 ||  0 ||  0 ||  0 ||  0  
|-
|-
| Description || Write the setting parameters in the 0x22 address to Lora|| Reset A9G module || Reserved || Reserved ||Reserved || Reserved ||Receive data set ||Send user data
| Description || L_SET || G_RESET || Reserved || Reserved ||Reserved || Reserved || L_RXNE || L_TX
|}
|}
* L_SET(Write Only)
# Write 1 to set parameters from 0x22 to LORA Module.
# Write 0 not effect
* G_RESET(Write Only)
# Write 1 to reset A9G Module
# Write 0 not effect
* L_RXNE(Read & Write)
# Write 1 cause error
# Write 0 to clear
# Read 1 means data has been received, please get the data from the register 0x11 - 0x20.
# Read 0 means no data available now.
* L_SET(Write Only)
# Write 1 to send data,please fill in the data in register 0x01 - 0x10 before send.
# Write 0 not effect
----
----
{| class="wikitable" style="height: 200px"
|-
! Register address !! Function
|-
| 0x23 || register write reference
|-
|0x01 || Send user data
|-
| 0x02 || Receive data set
|-
| 0x40 || Reset A9G
|-
|0x80 || Set the Lora register
|}


==How to use==
==How to use==

Revision as of 23:00, 2 July 2019

IoT Node(A)

IoTnodeA1.jpg

Descriptions

Iot Node(A) is one of Docker Pi series module.
IOT Node(A) = GPS/BDS + GSM + Lora.

Features

  • DockerPi Series
  • Programmable
  • Control directly(without programming)
  • Extend the GPIO Pins
  • GPS/BDS Support
  • GSM Support
  • Lora Support
  • Can Stack with other Stack board
  • Independent of the mainboard hardware (require I2C support)

Specifications

GPRS section

  • 1. Low power consumption, standby sleep current <1mA
  • 2. Support GSM/GPRS four frequency bands, including 850, 900, 1800, 1900MHZ;
  • 3. GPRS Class 10;
  • 4. Support GPRS data service, maximum data rate, download 85.6Kbps, upload 42.8Kbps;
  • 5. Support standard GSM07.07, 07.05 AT commands, and access the serial port through I2C interface conversion.
  • 6. AT commands support standard AT and TCP/IP command ports

GPS section

  • 1. Support BDS/GPS joint positioning
  • 2. Support A-GPS, A-BDS
  • 3. Support standard SIM card

LORA section

  • 1. Transmission distance:500 Meters (RF parameters: 0x50 @ China City)
  • 2. Support FSK, GFSK, MSK, GMSK, LoRaTM and OOK modulation methods
  • 3. Ultra-high receiver sensitivity as low as -141 dBm
  • 4. Support preamble detection
  • 5. Packet engine with CRC, up to 256 bytes
  • 6. LORA transceiver indicator
  • 7. Easy TX/RX by DockerPi

Mechanical Drawings

Lora mechanical.png


Gallery

IoTnodeA1.jpg
IoTnodeA2.jpg
IoTnodeA3.jpg
IoTnodeA4.jpg
IoTnodeA5.jpg
IoTnodeA6.jpg

On Board Modules Documentations

Technical Details

A9G Module

  • A9G module offers two serial port.
  • Use I2C <=> UART bridge for communication.
Serial Port Module name
/dev/ttySC0 GSM
/dev/ttySC1 GPS/BDS

Register Map

Register Address Function Value
0x01 LORA_TX1 Lora TX Buffer 1 - User Data
0x02 LORA_TX2 Lora TX Buffer 2 - User Data
0x03 LORA_TX3 Lora TX Buffer 3 - User Data
0x04 LORA_TX4 Lora TX Buffer 4 - User Data
0x05 LORA_TX5 Lora TX Buffer 5 - User Data
0x06 LORA_TX6 Lora TX Buffer 6 - User Data
0x07 LORA_TX7 Lora TX Buffer 7 - User Data
0x08 LORA_TX8 Lora TX Buffer 8 - User Data
0x09 LORA_TX9 Lora TX Buffer 9 - User Data
0x0a LORA_TX10 Lora TX Buffer 10 - User Data
0x0b LORA_TX11 Lora TX Buffer 11 - User Data
0x0c LORA_TX12 Lora TX Buffer 12 - User Data
0x0d LORA_TX13 Lora TX Buffer 13 - User Data
0x0e LORA_TX14 Lora TX Buffer 14 - User Data
0x0f LORA_TX15 Lora TX Buffer 15 - User Data
0x10 LORA_TX16 Lora TX Buffer 16 - User Data
0x11 LORA_RX1 Lora RX Buffer 1 - User Data
0x12 LORA_RX2 Lora RX Buffer 2 - User Data
0x13 LORA_RX3 Lora RX Buffer 3 - User Data
0x14 LORA_RX4 Lora RX Buffer 4 - User Data
0x15 LORA_RX5 Lora RX Buffer 5 - User Data
0x16 LORA_RX6 Lora RX Buffer 6 - User Data
0x17 LORA_RX7 Lora RX Buffer 7 - User Data
0x18 LORA_RX8 Lora RX Buffer 8 - User Data
0x19 LORA_RX9 Lora RX Buffer 9 - User Data
0x1a LORA_RX10 Lora RX Buffer 10 - User Data
0x1b LORA_RX11 Lora RX Buffer 11 - User Data
0x1c LORA_RX12 Lora RX Buffer 12 - User Data
0x1d LORA_RX13 Lora RX Buffer 13 - User Data
0x1e LORA_RX14 Lora RX Buffer 14 - User Data
0x1f LORA_RX15 Lora RX Buffer 15 - User Data
0x20 LORA_RX16 Lora RX Buffer 16 - User Data
  • 0x01 - 0x10 Write Only.
  • 0x11 - 0x20 Read Only.

Register Address 0x22
Name - SpreadingFactor SignalBandwidth ErrorCoding
Default Value 0 1 0 1 1 0 1 1
Description Reserved Band range 7-12 Spread spectrum bandwidth 6-9 Effective data ratio 1-4
  • It is recommended to keep the default unless you know the meaning of the LORA parameter.

Register Address 0x23
Default Value 0 0 0 0 0 0 0 0
Description L_SET G_RESET Reserved Reserved Reserved Reserved L_RXNE L_TX
  • L_SET(Write Only)
  1. Write 1 to set parameters from 0x22 to LORA Module.
  2. Write 0 not effect
  • G_RESET(Write Only)
  1. Write 1 to reset A9G Module
  2. Write 0 not effect
  • L_RXNE(Read & Write)
  1. Write 1 cause error
  2. Write 0 to clear
  3. Read 1 means data has been received, please get the data from the register 0x11 - 0x20.
  4. Read 0 means no data available now.
  • L_SET(Write Only)
  1. Write 1 to send data,please fill in the data in register 0x01 - 0x10 before send.
  2. Write 0 not effect



How to use

How to assemble

  • Mount the Iot Node(A) board to Raspberry Pi
  • Hookup GPS antana and Lora antana to IPX port.
  • Screws the GPRS antana on the SMA port.
IoTnodeA8.jpg
IoTnodeA7.jpg

Configuring I2C(Raspberry Pi)

Run sudo raspi-config and follow the prompts to install i2c support for the ARM core and linux kernel
Go to Interfacing Options

Raspi-config-1.png

then I2C

Raspi-config-2.png

Enable!

Raspi-config-3.png

Done!

Raspi-config-4.png

Replace /boot/overlays/sc16is752-i2c.dtbo(Raspberry Pi)

Replace /boot/overlays/sc16is752-i2c.dtbo file with this file: File:Sc16is752-i2c.zip

Replace dtbo sc16is752.png

Modify /boot/config.txt file and add following parameter:

 dtoverlay=sc16is752-i2c 

Add dt sc16.png

Configure For GPS/BDS(Raspberry Pi)

sudo apt install gpsd gpsd-clients python-gps
  • Modify "/etc/default/gpsd" file and add following parameters:
DEVICES="/dev/ttySC1"
GPSD_OPTIONS='-F /var/run/gpsd.sock'

How to use GPS module

  • NOTE: GPS module is OUTDOOR module, please test it outside.
  • Open a terminal and typing:
sudo systemctl restart gpsd.socket 
sudo cgps -s
  • Python Programming:
#!/usr/bin/env python3
import serial
import smbus
from gps import *
import os

# Restart gpsd service.
os.system("sudo systemctl restart gpsd.socket")
# Open serial port  
ser = serial.Serial('/dev/ttySC0', 115200)

if ser.isOpen == False:
    ser.open()
try:
    print("Turn on GPS switch")
    ser.write(str.encode("AT+GPS=1\r")) 
    time.sleep(1)              
    os.system("sudo cgps -s")                
except KeyboardInterrupt:
    ser.flushInput()
    ser.close()
  • Save it and execute it:
chmod +x mygps.py 
./mygps.py

How to use GPRS module

  • Insert the SIM card(It may need you purchase from ISP vendor).
  • Create a file named gprs.py
  • Paste follow code into the file and save it.
#!/usr/bin/env python3
import serial
import time
import smbus
import operator
import os

print("Waiting for initializing...")
bus.write_byte_data(0x16,0x23,0x40)
time.sleep(2)

bus = smbus.SMBus(1)    

ser = serial.Serial('/dev/ttySC0', 115200)

if ser.isOpen == False:
    ser.open()
try:
    print('-'*60)
    print("Initializing A9G GPRS module.")
    print("GSM connecting...")
    time.sleep(3)
    i = 0
    while True:
        ser.write(str.encode("AT+CCID\r"))
        size = ser.inWaiting() 
        if size != 0:
            ticks = time.time()
            response = ser.read(size)
            ccid = str(response,encoding="utf-8")
            if(ccid.find("89860") != -1):
                ccid_result_tmp1 = ccid.splitlines()
                ccid_result = ccid_result_tmp1[2].split(": ")
                if len(ccid_result) > 1:
                    print("SIM card OK, Network access testing is normal. Please check whether the card serial number is the same. number:" + ccid_result[1]);
                    time.sleep(3)
                    print('-'*60)
            else:
                i = i + 1
                print("Waiting network, If the time is too long, it may be a malfunction, or the SIM card is bad.:" + str(i))
                ser.flushInput() 
                time.sleep(1)    
except KeyboardInterrupt:
    ser.close()
  • Add executable rights and run:
chmod +x gprs.py 
./gprs.py

GPRS Connect with PPPd(Raspberry Pi)

A) First, replace the /boot/overlays/sc16is752-i2c.dtbo and make sure I2C is working properly.

  1. Replace sc16is752-i2c.dtbo [[1]]
  2. Configuring I2C[[2]]

B)Enter command i2cset -y 1 0x16 0x23 0x40 to reset the GPRS module.

C)Enter command sudo apt install ppp to install ppp tools.

Pppd-tools-apt.png

D)Copy /etc/ppp/peers/provider to /etc/ppp/peers/gprs E)Modify /etc/ppp/peers/gprs

  1. Line 10 : Please consult your service provider for the user (Example:cmnet).
  2. Line 15 : Please consult your service provider for the apn (Example:cmnet).
  3. Line 18 - Line 24:Recommended setting

Gprs-set.png

F)Modify /etc/chatscripts/gprs (Change Line 34 to Line 35)

Gprs ppp.png

G)Enter command sudo pppd call gprs to dial up.

Get-ip-ppp.png

H)Check your ppp config from your ISP.

Ppp-test.png

I)Enter command ping -I ppp0 8.8.8.8 test your network (If Internet available)

Ping-google.png

How to use Lora module

  • Principle:

<pre. The transmitting device performs data transfermation role by transmitting data to each of the register addresses from 0x01 to 0x10. The receiving device acquires the transmitted data by reading data from each register of 0x11~0x21.

  • Data sending example
 Create a file named lora_sender.py and then copy and paste following code: 
#!/usr/bin/env python3
import time
import smbus
import os
import sys

bus = smbus.SMBus(1)    

try:
    print("Initialize LORA transmitter open")
    bus.write_byte_data(0x16,0x23,0x01)    # 0x01 means "send user data" 
    # specify the data that you want to send. 
    # for example, if you want to send 4 data to receiver, you put them in a list.
    # although you can input 10 set of data due to you have 10 register to use.
    data_list = [170,85,165,90] 
    
    # define the register list that you want to use.
    register_list = [0x01,0x02,0x03,0x04] 
   
    # write data to register and then the data will be send out. 
    for index in range(0, len(data_list)):
        bus.write_byte_data(0x16,register_list[index],data_list[index])
        print("LORA send data to %d register %d data" %(register_list[index], data_list[index])
        time.sleep(1)    
except KeyboardInterrupt:
    sys.exit()
finally:
    print("Quit the sending data program")
  • Save it and run it:
chmod +x lora_sender.py
python3 lora_sender.py
  • Receiving Data Example:
 Create a file named "lora_receiver.py" and then copy and paste following code:
#!/usr/bin/env python3
import time
import smbus
import os
import sys

bus = smbus.SMBus(1)    

try:
    print("Initialize LORA transmitter open")
    bus.write_byte_data(0x16,0x23,0x02)    # 0x02 means "read user data" 
    # create a list to receive data from sender.
    resv_data = [] 
    
    # define the register list that you want to read from. 
    register_list = [0x11,0x12,0x13,0x14]
    
    #Read each register's data and append to resv_data list.
    for index in range(0,len(register_list)):
        resv_data.append(bus.read_byte_data(0x16, register_list[index])

    print("Received data:")
    print(resv_data)
    time.sleep(1)    
except KeyboardInterrupt:
    sys.exit()
finally:
    print("Quit the receiving data program.")
  • Save it and run it:
chmod +x lora_receiver.py
python3 lora_receiver.py

How to build your own project with 4 channel Relay board

  • Assemble Iot-Node(A) to Raspberry pi 3B/3B+/3A+/4B/Zero/Zero w.
  • Assemble another Iot-Node(A) to another Raspberry pi 3B/3B+/3A+/4B/Zero/Zero w.
  • Assemble 4 channel Relay board to one of them, and make sure you have already enabled i2c function on both of them.
  • Download demo code from github:
git clone https://github.com/geeekpi/dockerpi.git

and follow the readme to run the demo code.

Package Include

  • 1 x IoT Node(A) Board
  • 4 x M2.5*11mm Copper stick
  • 4 x M2.5 Nuts
  • 1 x Instructions

FAQ

  • Q: May i hotplug this module when it is running?
 A: We sugguest that you turn off the raspberry pi and then plug the module.

Keywords

  • IoT, lora, GPS, GPRS, GSM, antana, Raspberry pi 3B, Node, radio devices