Connects the CELLv1.0 to the Raspberry Pi without any additional wiring!
The ShieldRv1.0 is a shield or connecting board that connects the CELLv1.0 to the Raspberry Pi without any additional wiring. It also provides LEDs for the CELLv1.0 status lines. In addition, breakouts are provided for the four additional SparqEE boards (ACCELv1.0, GPSv1.0, POWERv1.0, RELAYv1.0) if the user prefers to directly connect any of those boards to the shield.
Note: Make sure you setup the Raspberry Pi fully, as described through our “Full initial installation,” before attempting these examples.
From the command line, execute the following command to talk directly to the CELLv1.0:
sudo minicom -b 115200 -o -D /dev/ttyAMA0
If you don’t have minicom, install it with the following command:
sudo apt-get install minicom
Additional tools necessary:
Plug the CELLv1.0 into the Raspberry Pi Shield and the Raspberry Pi Shield into the Raspberry Pi. Micro USB cable to the Raspberry Pi and Micro USB cable to the CELLv1.0 is required. The CELLv1.0 must also have an antenna attached and SIM card in order to communicate over the cellular network. This Raspberry Pi requires additional connection through either an Ethernet cable or keyboard and HDMI monitor is used to connect to the Raspberry Pi. The Raspberry Pi also must be booted with a specific OS.
Installation:
sudo apt-get install python-usb sudo apt-get install python-serial wget http://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.5.3a.tar.gz tar zxf RPi.GPIO-0.5.3a.tar.gz cd RPi.GPIO-0.5.3a/ (may need if the following fails) sudo apt-get update sudo apt-get install python-dev python3-dev sudo python setup.py install
sudo cp cmdline.txt /boot/cmdline.txt
sudo cp inittab /etc/inittab
sudo chmod 755 test_v1.py
sudo ./test_v1.py
Test script output plus annotation:
sudo ./test_v1.py ------------------ ------------------ ---> Main DEBUG INPUTS 1: <Inputs before CELLv1.0 powered on> DEBUG: Inputs Module Wakeup AP: 1 Module Poweron: 1 Module Ready: 1 ------------------ ---> Main PO TurnOn: <Turns on CELLv1.0> PO: TurnOn ---> Main DEBUG INPUTS 2: DEBUG: Inputs <Inputs after CELLv1.0 powered on> Module Wakeup AP: 1 Module Poweron: 1 Module Ready: 0 ------------------ ate1 <echo enabled> OK <command executed correctly> DEBUG: Inputs Module Wakeup AP: 1 Module Poweron: 1 Module Ready: 0 at+cpin? <device ready> +CPIN: READY OK <command returned correctly> ------------------ ate1 OK DEBUG: Inputs Module Wakeup AP: 1 Module Poweron: 1 Module Ready: 0 at+cpin? +CPIN: READY OK
Before power-on:

The five yellow LEDs should all be lit.
Power-on, before network connected:

The RED LED should be lit.
Power-on, network connected:

The BLUE or GREEN LED should be lit (Blue is 3G, green is 2G).
#!/usr/bin/python
import SparqEE #version 1
import re
import signal
import sys
# GLOBALS --------------------------------------------------------------------
SparqEE.glob_debug = 5 #Override global debug print level
def debug(str):
SparqEE.debug_print( str, SparqEE.debug["DEBUG"] )
def debug2(cmd, ret):
debug(cmd)
debug( "---> CMD RET --->: " + str(ret) )
debug( "---> BUFFER --->" + SparqEE.buffer )
#-----------------------------------------------------------------------------
try:
SparqEE.cmd_setup() #set-up shield GPIO
SparqEE.cmd_power() #power on
SparqEE.cmd_connection() #check cellular connection
#BASIC AT COMMANDS
#Nickname #at command #Description
ret = SparqEE.at_status() #at_at #Quick status
debug2 ("STATUS", ret)
ret = SparqEE.at_echoOn() #at_ate1 #Enable command echo
debug2 ("ECHO", ret)
ret = SparqEE.at_reg() #at_creg #Network registration status
debug2 ("REG", ret)
ret = SparqEE.at_nets() #at_cops #List available networks
debug2 ("NETS", ret)
ret = SparqEE.at_tech() #at_cnti #Current tech
debug2 ("TECH", ret)
ret = SparqEE.at_sig() #at_csq #Signal Quality
debug2 ("SIG", ret)
#-----------------------------------------------------------------------------
SparqEE.debug_print( "***END***", SparqEE.debug["WARNING"] )
SparqEE.cmd_cleanup() #clean-up shield GPIO
except:
SparqEE.debug_print( "***END (exception)***", SparqEE.debug["CRITICAL"] )
SparqEE.cmd_cleanup() #clean-up shield GPIO
print "Unexpected error:", sys.exc_info()[0]
raise
#!/usr/bin/python
import SparqEE #version 1
import re
import signal
import sys
# GLOBALS --------------------------------------------------------------------
SparqEE.glob_debug = 5 #Override global debug print level
def debug(str):
SparqEE.debug_print( str, SparqEE.debug["DEBUG"] )
def debug2(cmd, ret):
debug(cmd)
debug( "---> CMD RET --->: " + str(ret) )
debug( "---> BUFFER --->" + SparqEE.buffer )
#-----------------------------------------------------------------------------
try:
SparqEE.cmd_setup() #set-up shield GPIO
SparqEE.cmd_power() #power on
SparqEE.cmd_connection() #check cellular connection
#BASIC SMS
ret = SparqEE.at_sms("+12223334444", "20140902 1:00pm testing sms")
debug2 ("STATUS", ret)
#-----------------------------------------------------------------------------
SparqEE.debug_print( "***END***", SparqEE.debug["WARNING"] )
SparqEE.cmd_cleanup() #clean-up shield GPIO
except:
SparqEE.debug_print( "***END (exception)***", SparqEE.debug["CRITICAL"] )
SparqEE.cmd_cleanup() #clean-up shield GPIO
print "Unexpected error:", sys.exc_info()[0]
raise
This option uses SMS-over-IP which essentially creates a TCP connection and used an SMS gateway to send the text to an endpoint.
ret = SparqEE.at_webopen() #at_zipcallOpen #start call - state 1 open ret = SparqEE.at_websetup(1,0,"23.253.146.203",9999) #at_zipopen #socketId,type(TCP=0),IP,Port ret = SparqEE.at_websend(1) #at_zipsend #send data msg = "SABCDWXYZ+12223334444 Hello!\n\n" ret = SparqEE.at_webmsg(msg) #at_zipwrite ret = SparqEE.at_webclose() #at_zipcallClose #stop call - state 0 close
You’ll notice the line:
msg = "SABCDWXYZ+12223334444 Hello!\n\n"
The user is ABCD and the pass is WXYZ. You’ll have to use your credentials which are available under your SparqSIM account under “Services”->”Source Credentials”. That line will look something like the following for non ASCII characters:
msg = "S" + chr(0x41) + chr(0x42) + chr(0x43) + chr(0x44) + chr(0x57) + chr(0x58) + chr(0x59) + chr(0x5a) + "+12223334444 Hello!\n\n"
Where 0x41 = ‘A’ … 0x5a = ‘Z’
#!/usr/bin/python
import SparqEE #version 1
import re
import signal
import sys
# GLOBALS --------------------------------------------------------------------
SparqEE.glob_debug = 5 #Override global debug print level
def debug(str):
SparqEE.debug_print( str, SparqEE.debug["DEBUG"] )
def debug2(cmd, ret):
debug(cmd)
debug( "---> CMD RET --->: " + str(ret) )
debug( "---> BUFFER --->" + SparqEE.buffer )
#-----------------------------------------------------------------------------
try:
SparqEE.cmd_setup() #set-up shield GPIO
SparqEE.cmd_power() #power on
SparqEE.cmd_connection() #check cellular connection
#BASIC WEB QUERY
#Nickname #at command #Description
ret = SparqEE.at_webopen() #at_zipcallOpen #start call - state 1 open
debug2 ("WEBOPEN", ret)
ret = SparqEE.at_websetup(1,0,"www.dbunplugged.com",80) #at_zipopen #socket id,type(UDP=1,TCP=0),hostname/IP,Port
debug2 ("WEBSETUP", ret)
ret = SparqEE.at_websend(1) #at_zipsend #send data
debug2 ("WEBSEND", ret)
msg = "GET /ip HTTP/1.1\r\nHost: www.dbunplugged.com\r\n\r\n"
ret = SparqEE.at_webmsg(msg) #at_zipwrite
debug2 ("WEBMSG", ret)
ret = SparqEE.at_webclose() #at_zipcallClose #stop call - state 0 close
debug2 ("WEBCLOSE", ret)
#-----------------------------------------------------------------------------
SparqEE.debug_print( "***END***", SparqEE.debug["WARNING"] )
SparqEE.cmd_cleanup() #clean-up shield GPIO
except:
SparqEE.debug_print( "***END (exception)***", SparqEE.debug["CRITICAL"] )
SparqEE.cmd_cleanup() #clean-up shield GPIO
print "Unexpected error:", sys.exc_info()[0]
raise
This example is a quick guide to establish a PPP connection providing you an IP address and internet gateway through the CELLv1.0. This example uses a great script called Sakis3g and attempts to give you the quick and dirty for getting it working with the Raspberry Pi.
Please comment on the forum if you have any questions or something is missing.
Command Notes sudo apt-get update Make sure you are up to date sudo apt-get install ppp Install PPP wget "http://www.sparqee.com/code/cellv1/sakis3g.gz" Grab the sakis3g script gunzip sakis3g.gz Unzip it chmod +x sakis3g Make it executable Run the Script: sudo ./sakis3g connect --console --nostorage --pppd APN="Internetd.gdsp" BAUD=115200 CUSTOM_TTY="/dev/ttyAMA0" MODEM="OTHER" OTHER="CUSTOM_TTY" APN_USER="user" APN_PASS="pass" If everything goes well, you should be presented with something like: "MF206A connected to DATA ONLY (310410)." This means it's connected!!! To validate that you are online, check two things: 1. "ifconfig" - make sure you were assigned an IP address on interface ppp0 2. "curl www.dbunplugged.com/ip" - it should return the public IP address, <br>, and the time Kill the Script: sudo ./sakis3g disconnect
Same steps as the Raspberry Pi except the script is going to be something like the following. You may have to change some parameters as noted:
sudo ./sakis3g connect --nostorage --pppd APN="Internetd.gdsp" APN_USER="user" APN_PASS="pass" USBINTERFACE="1" USBDRIVER="option" OTHER="USBMODEM" USBMODEM="19d2:0117"
OPTION NOTE
APN Should be the APN from your particular provider (typically on the SIM card package)
APN_USER Same as APN, but for username. If none, leave as-is
APN_PASS Same as APN, but for password. If none, leave as-is
USBINTERFACE The 'X' digit(s) following the USB modem from /dev/ttyUSBX
USBMODEM USB Modem MAC addr from "lsusb" (when the modem is on), ex: 19d2:0117
If everything goes well, you should be presented with something like:
"MF206A connected to DATA ONLY (310410)."
This means it's connected!!!
Here are two troubleshooting options that work consistently if the modem is having problems connecting. Without legitimate error messages, make sure these two tricks are tried first:
1. Reset the Modem by:Toggle power (unplug/plug back in)
-Pull "PRN" to ground momentarily
-Verify the modem is talking by sending a few "at<enter>" commandsUbuntu 14.04: sudo minicom -b 115200 -o -D /dev/ttyUSB1
2. Raspberry Pi: sudo minicom -b 115200 -o -D /dev/ttyAMA0
Note: A potential automation fix is to add “ATH” to the dialer script needs in order to hang up previous sessions.
Interesting options for the sakis3g command:
OPTION NOTE
--console All from the terminal, no ActiveX gui
--debug Debug information
--googledns Use google dns servers instead of those provided by the peer
--interactive Enter interactive mode versus using the command options
View the Manpages:
1. sudo ./sakis3g man
-Helpful options for the command line
-Automation information (about startup)
2. sudo ./sakis3g man sakis3g_config
-Eliminate command line options by putting options in a config file
Troubleshooting Commands:
Command Notes
tail -f /var/log/messages Debug information
tail -f /var/log/syslog Debug information
lsusb Information about USB devices/drivers
dmesg Debug information
netstat -nr Routing/Networking information
ifconfig -a Networking interfaces
cat /etc/resolv.conf Routing information
http://en.wikipedia.org/wiki/Hayes_command_set
Exhaustive set of commands for modem
Using minicom, see what the SIM card reports for the command
at+cgdcont=?
With the SparqSIM SIM card, it should include "Internetd.gdsp" and look something like this:
+CGDCONT: 1,"IP","Internetd.gdsp","0.0.0.0",0,0
If the APN isn't correct, then enter the following and try again:
at+cgdcont=1,"IP","Internetd.gdsp"
You can use the standard Raspberry Pi UART and functions to capture GPS data over the HW UART or, as demonstrated below, you can use the Raspberry Pi to “Bit Bang” or port “Software Serial” rather than the Hardware one.
The below software Serial port utilizes the great PIGPIO which you can download and install for free at the following URL:
http://abyz.co.uk/rpi/pigpio/download.html
Here’s the file I used from their site and the installation on the Raspberry Pi:
wget abyz.co.uk/rpi/pigpio/pigpio.zip unzip pigpio.zip cd PIGPIO make sudo make install
#!/usr/bin/python
import sys
import time
import difflib
import pigpio
RX=18
try:
pi = pigpio.pi()
pi.set_mode(RX, pigpio.INPUT)
pi.bb_serial_read_open(RX, 9600, 8)
print "DATA - SOFTWARE SERIAL:"
while 1:
(count, data) = pi.bb_serial_read(RX)
if count:
print data
time.sleep(1)
except:
pi.bb_serial_read_close(RX)
pi.stop()