About the project
Twenty to thirty minutes guide lines about connecting BeagleBone Black with the ITBP h-nanoGSM shield.
Needed parts
- BeagleBone Black
- h-nanoGSM - GSM shield [nano] or
- any other ITBP modular modem,
- 1pcs. one cell LiPo battery [3.7V, > 250mA], or
- 1pcs. super-capacitor, bigger than 1F, rated for more than 5V and having ERS lower than 250mOhm [we've tested SCMT22C505MRBA0 from AVX and PM-5R0H105-1 from POWERSTOR/EATON].
Knowledge and skills required
- BeagleBone Black previous experience is quite welcome,
- some entry level Python and Linux knowledge are required,
- soldering
About BeagleBone Black
Folks, finding BBB was a pleasant surprise for me! This BeagleBone Black it is f....g awesome piece of s..t- very powerful engine!
Just watch/listen Jason, the co-creator of beagleboard.org discuss the BeagleBone Black, bellow.
About h-nanoGSM shield
h-nanoGSM - became commercially available in 2016, August. It is a quad band GSM only(world wide compatible) + Bluetooth 3.0 nano shield, packed in an compact format 1.25"x1.16"(31.75x29.46mm) and with weight around 8g. Same as his bigger brothers (c-uGSM and d-u3G), it is not only a break-board, but a full shield having powerful features embedded, as: USB support (communication and powering), auto level 2.8V-5V digital interfaces and Lithium Polymer charger integrated.
Some hardware hints
The BBB board it's really a quite big engine embedded in a small format. Having 5 UART ports gave us lot of alternatives for interfacing.
Keep in mind that almost all BBB logic pin have several functions accessible trough the PinMUX [mode0 ==> mode7]. Take a look in following pdfs [very important resources]:
BBB P9 pins table [pdf] and
BBB P8 pins table [pdf]
In our example, we will use BBB UART1 for data interfacing with the modem and P9_14[EHRPWM1A], P9_16[EHRPWM1B] and P9_18[I2C1_SDA] as modem control interface.
Prepare your h-nanoGSM shield. Solder the pinheader; see how here. Connect the LiPo battery [take care at polarity!] or the super-capacitor, the antenna to the GSM uFL connector. Insert the SIM card [remove PIN code checking before].
Hardware connections
In the picture bellow you can observe all the needed connections.
Let's reveal the connection details from image uphere:
Above, the h-nanoGSM shield is powered in the "WITH Lithium Polymer" configuration [powered from 5V], but using one 1F super-capacitor instead the LiPo battery.
IMPORTANT: In our tests, the BBB was powered from the USB. In this case the h-nanoGSM powering was made connecting the BBB SYS_5V with the modem Vin[5V] pin! If the BBB is powered via the 5V barrel connector, we recomend to you to power the modem from the BBB VDD_5V [wire the BBB VDD_5V with the modem Vin[5V] pin].
For other h-nanoGSM shield / ITBP modular modem powering options, read c-uGSM, h-nanoGSM and d-u3G how to start.
Let's do the magic [Software]
SOFTWARE ASSUMTIONS
The real target it is to prepare the BeagleBone Black to be compatible with our RPI support files for h-nanoGSM[code examples] and with the PPP examples, making as little changes as possible.
BBB Debian distribution is used in this how to. We assume you will start from a out of the box BBB [if you used your BBB before, some steps may be skiped].
BBB SETUP TASKS
a. Connect the BBB to the USB. Download the BBB USB driver from http://beagleboard.org/getting-started. Follow the instructions found on that page and install the USB driver. Connect to the BBB using SSH service [initial username is root, no password].
DEBIAN SETUP [MAINLY BBB PORTS CONFIGURATION, BUT GATHERING SOME PACKAGES TOO]
b. Connect the the BBB ethernet to your lan. Check the connectivity to the internet. Enter following commands to the shell:
apt-get update
apt-get install python-serial
and, optional:
apt-get install mc
c. Using your preferred editor [I like mcedit, this is the reason I've installed the mc package, but you may use vi, vim...] edit the /etc/rc.local file:
mcedit /etc/rc.local
and insert following lines at the bottom, but before exit 0:
/etc/rc.config-itbp-modem > /dev/null 2>&1
Save.
d. Make/Copy the following file as /etc/rc.config-itbp-modem [right click & save as]
/etc/rc.config-itbp-modem
1 | #!/bin/sh -e |
2 | # |
3 | # rc.config-itbp-modem v0.11 |
4 | # |
5 | # This script configs the BBB ports for usage with the ITBP modular modems; Eg.: c-uGSM, |
6 | # h-nanoGSM, d-u3G. More details can be found on http://itbrainpower.net |
7 | # |
8 | # This SOFTWARE is distributed is provide "AS IS" in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
9 | # warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
10 | # |
11 | # Dragos Iosub, Bucharest 2017. |
12 | # http://itbrainpower.net |
13 | # |
14 | |
15 | # next line loads the universaln cape [no IO port mapped over BBB HDMI] |
16 | # reference: https://github.com/cdsteinkuehler/beaglebone-universal-io |
17 | /usr/local/bin/config-pin overlay cape-universaln #> /dev/null 2>&1 |
18 | |
19 | # next 3 lines, config P9_14, P9_16 and P9_18 as input pins WITHOUT pullings. |
20 | # Those pins will be used as CONTROL interface for the ITBP modular modems. |
21 | /usr/local/bin/config-pin P9_14 in |
22 | /usr/local/bin/config-pin P9_16 in |
23 | /usr/local/bin/config-pin P9_18 in |
24 | |
25 | #next four lines, config the P9_24 and P9_26 ports to be internally connected to UART1 |
26 | cd /sys/devices/ocp.*/P9_24_pinmux.*/ |
27 | echo uart > state |
28 | cd /sys/devices/ocp.*/P9_26_pinmux.*/ |
29 | echo uart > state |
30 | |
31 | #next line, enable the UART1 [will be available under linux as /dev/ttyO1] |
32 | /usr/local/bin/config-pin overlay BB-UART1 #> /dev/null 2>&1 |
33 | |
34 | |
35 | exit 0 |
36 |
Make it executable:
chmod 777 /etc/rc.config-itbp-modem
We are almost there...this was the Linux part. Just reboot your BBB [shutdown now -r or reboot will do this job].
PYTHON ITBP MODEM AND PPP SUPPORT FILES
a. Keep in mind that Python ITBP modem and PPP support files was written to compatible with the RPI and Debian distribution. There are three major differences when porting the code to the BBB [Debian]:
a1. The serial port names, /dev/ttyAMA0 for the RPI and /dev/ttyO1 for the BBB [we assumed that UART1 will be used]. We will address this later.
a2. The RPI.GPIO python class it is not present and compatible with BBB python. We will address this later.
a3. The BBB port addressing it is different from the RPI port addresing under python.
For all a1, a2 and a3 will apply some simple patches, later.
b. Download the GSM python and PPP support files from the download page. You will need to register using your name, email address and with the IMEI of your h-nanoGSM [the IMEI can be found on the top of the M66FA chip, or you may find using AT+CIMI command].
c. Decompress the archives. This archive contains, along with other files, the following files: "hnanoGSM1_08_hw_control.py", "hnanoGSM_Serial_Lib.py" and "globalParVar.py", related to python modem control and serial communication.
d. Copy the code bellow and make a file called "ITBP_gpioBBB.py" in the very same folder where the "mdmname_ver_hw_control.py" [in this case "hnanoGSM1_08_hw_control.py"] it is located. Alternate, you can
download from here [right click & save as]: ITBP_gpioBBB.py
ITBP_gpioBBB.py : BBB GPIO python helper file
1 | ############################################################################################################################################### |
2 | #ITBP_gpioBBB.py v01 - RPI.GPIO helper for ITBP modular modem - port for BBB[debian] |
3 | #COPYRIGHT (c) 2017 Dragos Iosub / R&D Software Solutions srl |
4 | # |
5 | #You are legaly entitled to use this SOFTWARE ONLY IN CONJUNCTION WITH ITBP MODULAR MODEMS DEVICES USAGE [c-uGSM, h-nanoGSM and d-u3G shileds]. Modifications, derivates and redistribution |
6 | #of this software must include unmodified this COPYRIGHT NOTICE. You can redistribute this SOFTWARE and/or modify it under the terms |
7 | #of this COPYRIGHT NOTICE. Any other usage may be permited only after written notice of Dragos Iosub / R&D Software Solutions srl. |
8 | # |
9 | #This SOFTWARE is distributed is provide "AS IS" in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
10 | #warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
11 | # |
12 | #Dragos Iosub, Bucharest 2017. |
13 | #http://itbrainpower.net |
14 | ############################################################################################################################################### |
15 | import subprocess |
16 | ports = ['P9_14','P9_16','P9_18'] |
17 | mapping ={'P9_14':'gpio50','P9_16':'gpio51','P9_18':'gpio4'} |
18 | |
19 | #some definitions, do not change |
20 | OUT ='out' |
21 | IN ='in' |
22 | HIGH = 1 |
23 | LOW = 0 |
24 | BOARD = 1 #just 4 compatibility with RPi.GPIO |
25 | dirmap = {'out':1,'in':0} |
26 | |
27 | def output(port, value): |
28 | p = subprocess.Popen('echo '+str(value)+' > /sys/class/gpio/'+mapping[port]+'/value', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
29 | out, err = p.communicate() |
30 | #print str(out) |
31 | #print str(err) |
32 | |
33 | def setup(port, direction, initial=-100): |
34 | p = subprocess.Popen('/usr/local/bin/config-pin '+str(port)+' '+str(direction), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
35 | out, err = p.communicate() |
36 | #print out |
37 | #print err |
38 | if (initial > -100): |
39 | output(port, initial) #write initial state |
40 | |
41 | def input(port): |
42 | p = subprocess.Popen(['cat','/sys/class/gpio/'+mapping[port]+'/value'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
43 | out, err = p.communicate() |
44 | #print out |
45 | #print err |
46 | try: |
47 | return int(out) |
48 | except: |
49 | return -100 |
50 | #print str(out) |
51 | #print str(err) |
52 | |
53 | def cleanup(): |
54 | global ports |
55 | for port in ports: |
56 | setup(port, 'in', -101)# force input float[no pull up or pull down] |
57 | |
58 | |
59 | #just 4 compatibility with RPi.GPIO |
60 | def setmode(whatever): |
61 | return |
62 | |
63 | #just 4 compatibility with RPi.GPIO |
64 | def setwarnings(whatever): |
65 | return |
66 | |
67 |
e. Fixing a1, a2 and a3 differences
e1. Edit the "hnanoGSM1_08_hw_control.py" file [mcedit hnanoGSM1_08_hw_control.py] and replace the line 17":
import RPi.GPIO as GPIO with:
import ITBP_gpioBBB as GPIO
e2. Edit the "hnanoGSM_Serial_Lib.py" file [mcedit hnanoGSM_Serial_Lib.py] and replace the line 40":
agsm = serial.Serial("/dev/ttyAMA0", serialSpeed, timeout=1) with:
agsm = serial.Serial("/dev/ttyO1", serialSpeed, timeout=1)
e3. Edit the "globalParVar.py" file [mcedit globalParVar.py] and set the "CONTROL interface for the ITBP modular modems" as bellow:
RESET = "P9_14"
POWER = "P9_16"
STATUS = "P9_18"
TEST THE SETUP
You may run any ITBP modem python example file [Eg. python sendSMS.py].
Ready. Enjoy!
VARIANTS. REFERENCES.
You may try the setup using other UART ports as /dev/ttyO2 or /dev/ttyO4, or using other BBB I/O pins for modem CONTROL.
First of all, check the pins are free [config-pin utility can gave you valuable information], but guide after following references:
- https://github.com/cdsteinkuehler/beaglebone-universal-io
- http://www.armhf.com/using-beaglebone-black-gpios/
- http://derekmolloy.ie/gpios-on-the-beaglebone-black-using-device-tree-overlays/
- CAPE, what's about: http://elinux.org/Capemgr
- BBB pins definition: https://github.com/jadonk/bonescript/blob/master/src/bone.js
- and last, but not least http://www.ti.com/product/am3359
Keep calm, understand what's under the BBB blanket and write your own cape [best approach]....and share with us.
TUTORIAL & SOFTWARE ARE PROVIDED WITHOUT ANY WARRANTY!!! USE IT AT YOUR OWN RISK!!!!