Skip to content

Commit 064b7ec

Browse files
committed
Moved AT commands into .h. Added identification example.
1 parent be42c81 commit 064b7ec

File tree

4 files changed

+284
-114
lines changed

4 files changed

+284
-114
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/*
2+
Read the identification and version information from the SARA-R5
3+
By: Paul Clark
4+
SparkFun Electronics
5+
Date: October 20th 2020
6+
7+
Please see LICENSE.md for the license information
8+
9+
This example demonstrates how to read the:
10+
Manufacturer identification
11+
Model identification
12+
Firmware version identification
13+
IMEI identification
14+
IMSI identification
15+
SIM CCID
16+
Subscriber number
17+
18+
This code is intend to run on the MicroMod Asset Tracker Carrier Board
19+
using (e.g.) the MicroMod Artemis Processor Board
20+
21+
Select the SparkFun RedBoard Artemis ATP from the SparkFun Apollo3 boards
22+
23+
*/
24+
25+
//Click here to get the library: http://librarymanager/All#SparkFun_u-blox_SARA-R5_Arduino_Library
26+
#include <SparkFun_u-blox_SARA-R5_Arduino_Library.h>
27+
28+
// Uncomment the next line to connect to the SARA-R5 using hardware Serial1
29+
#define saraSerial Serial1
30+
31+
// Uncomment the next line to create a SoftwareSerial object to pass to the SARA-R5 library instead
32+
//SoftwareSerial saraSerial(8, 9);
33+
34+
// Create a SARA_R5 object to use throughout the sketch
35+
SARA_R5 assetTracker;
36+
37+
void setup() {
38+
Serial.begin(9600);
39+
40+
Serial.println(F("Initializing the Asset Tracker (SARA-R5)..."));
41+
Serial.println(F("...this may take ~25 seconds if the SARA is off."));
42+
Serial.println(F("...it may take ~5 seconds if it just turned on."));
43+
44+
// Initialize the SARA
45+
if (assetTracker.begin(saraSerial, 9600))
46+
{
47+
Serial.println(F("Asset Tracker (SARA-R5) connected!"));
48+
}
49+
else
50+
{
51+
Serial.println(F("Unable to communicate with the SARA."));
52+
Serial.println(F("Manually power-on (hold POWER for 3 seconds) on and try again."));
53+
while (1) ; // Loop forever on fail
54+
}
55+
Serial.println();
56+
57+
Serial.println("Manufacturer ID: " + String(assetTracker.getManufacturerID()));
58+
Serial.println("Model ID: " + String(assetTracker.getModelID()));
59+
Serial.println("Firmware Version: " + String(assetTracker.getFirmwareVersion()));
60+
Serial.println("Product Serial No.: " + String(assetTracker.getSerialNo()));
61+
Serial.println("IMEI: " + String(assetTracker.getIMEI()));
62+
Serial.println("IMSI: " + String(assetTracker.getIMSI()));
63+
Serial.println("CCID: " + String(assetTracker.getCCID()));
64+
Serial.println("Subscriber No.: " + String(assetTracker.getSubscriberNo()));
65+
Serial.println("Capabilities: " + String(assetTracker.getCapabilities()));
66+
}
67+
68+
void loop() {
69+
// Do nothing. Now that we're registered move on to the next example.
70+
}

keywords.txt

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ SARA_R5_message_format_t KEYWORD1
2323
# Methods and Functions KEYWORD2
2424
#######################################
2525

26-
begin KEYWORD2
27-
enableDebugging KEYWORD2
2826
day KEYWORD2
2927
month KEYWORD2
3028
year KEYWORD2
@@ -54,16 +52,25 @@ longOp KEYWORD2
5452
numOp KEYWORD2
5553
act KEYWORD2
5654
begin KEYWORD2
55+
enableDebugging KEYWORD2
56+
bufferedPoll
57+
processReadEvent
5758
poll KEYWORD2
5859
setSocketReadCallback KEYWORD2
5960
setSocketCloseCallback KEYWORD2
6061
setGpsReadCallback KEYWORD2
6162
write KEYWORD2
6263
at KEYWORD2
6364
enableEcho KEYWORD2
64-
imei KEYWORD2
65-
imsi KEYWORD2
66-
ccid KEYWORD2
65+
getManufacturerID KEYWORD2
66+
getModelID KEYWORD2
67+
getFirmwareVersion KEYWORD2
68+
getSerialNo KEYWORD2
69+
getIMEI KEYWORD2
70+
getIMSI KEYWORD2
71+
getCCID KEYWORD2
72+
getSubscriberNo KEYWORD2
73+
getCapabilities KEYWORD2
6774
reset KEYWORD2
6875
clock KEYWORD2
6976
autoTimeZone KEYWORD2
@@ -87,17 +94,17 @@ socketOpen KEYWORD2
8794
socketClose KEYWORD2
8895
socketConnect KEYWORD2
8996
socketWrite KEYWORD2
90-
socketWrite KEYWORD2
9197
socketRead KEYWORD2
98+
socketReadUDP KEYWORD2
9299
socketListen KEYWORD2
93-
IPAddress lastRemoteIP KEYWORD2
100+
socketGetLastError KEYWORD2
101+
lastRemoteIP KEYWORD2
94102
boolean isGPSon KEYWORD2
95103
gpsPower KEYWORD2
96104
gpsEnableClock KEYWORD2
97105
gpsGetClock KEYWORD2
98106
gpsEnableFix KEYWORD2
99107
gpsGetFix KEYWORD2
100-
gpsGetFix KEYWORD2
101108
gpsEnablePos KEYWORD2
102109
gpsGetPos KEYWORD2
103110
gpsEnableSat KEYWORD2

src/SparkFun_u-blox_SARA-R5_Arduino_Library.cpp

Lines changed: 95 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -16,95 +16,6 @@
1616

1717
#include <SparkFun_u-blox_SARA-R5_Arduino_Library.h>
1818

19-
#define SARA_R5_STANDARD_RESPONSE_TIMEOUT 1000
20-
#define SARA_R5_SET_BAUD_TIMEOUT 500
21-
#define SARA_R5_POWER_PULSE_PERIOD 3200
22-
#define SARA_R5_RESET_PULSE_PERIOD 10000
23-
#define SARA_R5_IP_CONNECT_TIMEOUT 60000
24-
#define SARA_R5_POLL_DELAY 1
25-
#define SARA_R5_SOCKET_WRITE_TIMEOUT 10000
26-
27-
// ## Suported AT Commands
28-
// ### General
29-
const char SARA_R5_COMMAND_AT[] = "AT"; // AT "Test"
30-
const char SARA_R5_COMMAND_ECHO[] = "E"; // Local Echo
31-
const char SARA_R5_COMMAND_MANU_ID[] = "+CGMI"; // Manufacturer identification
32-
const char SARA_R5_COMMAND_MODEL_ID[] = "+CGMM"; // Model identification
33-
const char SARA_R5_COMMAND_FW_VER_ID[] = "+CGMR"; // Firmware version identification
34-
const char SARA_R5_COMMAND_IMEI[] = "+CGSN"; // IMEI identification
35-
const char SARA_R5_COMMAND_IMSI[] = "+CIMI"; // IMSI identification
36-
const char SARA_R5_COMMAND_CCID[] = "+CCID"; // SIM CCID
37-
const char SARA_R5_COMMAND_REQ_CAP[] = "+GCAP"; // Request capabilities list
38-
// ### Control and status
39-
const char SARA_R5_COMMAND_POWER_OFF[] = "+CPWROFF"; // Module switch off
40-
const char SARA_R5_COMMAND_FUNC[] = "+CFUN"; // Functionality (reset, etc.)
41-
const char SARA_R5_COMMAND_CLOCK[] = "+CCLK"; // Real-time clock
42-
const char SARA_R5_COMMAND_AUTO_TZ[] = "+CTZU"; // Automatic time zone update
43-
const char SARA_R5_COMMAND_TZ_REPORT[] = "+CTZR"; // Time zone reporting
44-
// ### Network service
45-
const char SARA_R5_COMMAND_CNUM[] = "+CNUM"; // Subscriber number
46-
const char SARA_R5_SIGNAL_QUALITY[] = "+CSQ";
47-
const char SARA_R5_OPERATOR_SELECTION[] = "+COPS";
48-
const char SARA_R5_REGISTRATION_STATUS[] = "+CREG";
49-
const char SARA_R5_READ_OPERATOR_NAMES[] = "+COPN";
50-
const char SARA_R5_COMMAND_MNO[] = "+UMNOPROF"; // MNO (mobile network operator) Profile
51-
// ### SMS
52-
const char SARA_R5_MESSAGE_FORMAT[] = "+CMGF"; // Set SMS message format
53-
const char SARA_R5_SEND_TEXT[] = "+CMGS"; // Send SMS message
54-
// V24 control and V25ter (UART interface)
55-
const char SARA_R5_COMMAND_BAUD[] = "+IPR"; // Baud rate
56-
// ### Packet switched data services
57-
const char SARA_R5_MESSAGE_PDP_DEF[] = "+CGDCONT";
58-
const char SARA_R5_MESSAGE_ENTER_PPP[] = "D";
59-
// ### GPIO
60-
const char SARA_R5_COMMAND_GPIO[] = "+UGPIOC"; // GPIO Configuration
61-
// ### IP
62-
const char SARA_R5_CREATE_SOCKET[] = "+USOCR"; // Create a new socket
63-
const char SARA_R5_CLOSE_SOCKET[] = "+USOCL"; // Close a socket
64-
const char SARA_R5_CONNECT_SOCKET[] = "+USOCO"; // Connect to server on socket
65-
const char SARA_R5_WRITE_SOCKET[] = "+USOWR"; // Write data to a socket
66-
const char SARA_R5_WRITE_UDP_SOCKET[] = "+USOST"; // Write data to a UDP socket
67-
const char SARA_R5_READ_SOCKET[] = "+USORD"; // Read from a socket
68-
const char SARA_R5_READ_UDP_SOCKET[] = "+USORF"; // Read UDP data from a socket.
69-
const char SARA_R5_LISTEN_SOCKET[] = "+USOLI"; // Listen for connection on socket
70-
const char SARA_R5_GET_ERROR[] = "+USOER"; // Get last socket error.
71-
// ### GNSS
72-
const char SARA_R5_GNSS_POWER[] = "+UGPS"; // GNSS power management configuration
73-
const char SARA_R5_GNSS_ASSISTED_IND[] = "+UGIND"; // Assisted GNSS unsolicited indication
74-
const char SARA_R5_GNSS_REQUEST_LOCATION[] = "+ULOC"; // Ask for localization information
75-
const char SARA_R5_GNSS_GPRMC[] = "+UGRMC"; // Ask for localization information
76-
const char SARA_R5_GNSS_REQUEST_TIME[] = "+UTIME"; // Ask for time information from cellular modem (CellTime)
77-
const char SARA_R5_GNSS_CONFIGURE_SENSOR[] = "+ULOCGNSS"; // Configure GNSS sensor
78-
const char SARA_R5_GNSS_CONFIGURE_LOCATION[] = "+ULOCCELL"; // Configure cellular location sensor (CellLocate®)
79-
80-
const char SARA_R5_RESPONSE_OK[] = "OK\r\n";
81-
const char SARA_R5_RESPONSE_ERROR[] = "ERROR\r\n";
82-
83-
// CTRL+Z and ESC ASCII codes for SMS message sends
84-
const char ASCII_CTRL_Z = 0x1A;
85-
const char ASCII_ESC = 0x1B;
86-
87-
#define NOT_AT_COMMAND false
88-
#define AT_COMMAND true
89-
90-
#define SARA_R5_NUM_SOCKETS 6
91-
92-
#define NUM_SUPPORTED_BAUD 6
93-
const unsigned long SARA_R5_SUPPORTED_BAUD[NUM_SUPPORTED_BAUD] =
94-
{
95-
115200,
96-
9600,
97-
19200,
98-
38400,
99-
57600,
100-
230400};
101-
#define SARA_R5_DEFAULT_BAUD_RATE 115200
102-
103-
const int RXBuffSize = 2056;
104-
const int rxWindowUS = 1000;
105-
char saraRXBuffer[RXBuffSize];
106-
char saraResponseBacklog[RXBuffSize];
107-
10819
static boolean parseGPRMCString(char *rmcString, PositionData *pos, ClockData *clk, SpeedData *spd);
10920

11021
SARA_R5::SARA_R5(int powerPin, int resetPin, uint8_t maxInitDepth)
@@ -481,10 +392,10 @@ SARA_R5_error_t SARA_R5::enableEcho(boolean enable)
481392
return err;
482393
}
483394

484-
String SARA_R5::manufacturerID(void)
395+
String SARA_R5::getManufacturerID(void)
485396
{
486397
char *response;
487-
char idResponse[16] = { 0x00 };
398+
char idResponse[16] = { 0x00 }; // E.g. u-blox
488399
SARA_R5_error_t err;
489400

490401
response = sara_r5_calloc_char(sizeof(idResponse) + 16);
@@ -502,10 +413,10 @@ String SARA_R5::manufacturerID(void)
502413
return String(idResponse);
503414
}
504415

505-
String SARA_R5::modelID(void)
416+
String SARA_R5::getModelID(void)
506417
{
507418
char *response;
508-
char idResponse[16] = { 0x00 };
419+
char idResponse[16] = { 0x00 }; // E.g. SARA-R510M8Q
509420
SARA_R5_error_t err;
510421

511422
response = sara_r5_calloc_char(sizeof(idResponse) + 16);
@@ -523,13 +434,55 @@ String SARA_R5::modelID(void)
523434
return String(idResponse);
524435
}
525436

526-
String SARA_R5::imei(void)
437+
String SARA_R5::getFirmwareVersion(void)
527438
{
528439
char *response;
529-
char imeiResponse[16] = { 0x00 };
440+
char idResponse[16] = { 0x00 }; // E.g. 11.40
530441
SARA_R5_error_t err;
531442

532-
response = sara_r5_calloc_char(sizeof(imeiResponse) + 16); // E.g. 004999010640000
443+
response = sara_r5_calloc_char(sizeof(idResponse) + 16);
444+
445+
err = sendCommandWithResponse(SARA_R5_COMMAND_FW_VER_ID,
446+
SARA_R5_RESPONSE_OK, response, SARA_R5_STANDARD_RESPONSE_TIMEOUT);
447+
if (err == SARA_R5_ERROR_SUCCESS)
448+
{
449+
if (sscanf(response, "\r\n%s\r\n", idResponse) != 1)
450+
{
451+
memset(idResponse, 0, 16);
452+
}
453+
}
454+
free(response);
455+
return String(idResponse);
456+
}
457+
458+
String SARA_R5::getSerialNo(void)
459+
{
460+
char *response;
461+
char idResponse[16] = { 0x00 }; // E.g. 357520070120767
462+
SARA_R5_error_t err;
463+
464+
response = sara_r5_calloc_char(sizeof(idResponse) + 16);
465+
466+
err = sendCommandWithResponse(SARA_R5_COMMAND_SERIAL_NO,
467+
SARA_R5_RESPONSE_OK, response, SARA_R5_STANDARD_RESPONSE_TIMEOUT);
468+
if (err == SARA_R5_ERROR_SUCCESS)
469+
{
470+
if (sscanf(response, "\r\n%s\r\n", idResponse) != 1)
471+
{
472+
memset(idResponse, 0, 16);
473+
}
474+
}
475+
free(response);
476+
return String(idResponse);
477+
}
478+
479+
String SARA_R5::getIMEI(void)
480+
{
481+
char *response;
482+
char imeiResponse[16] = { 0x00 }; // E.g. 004999010640000
483+
SARA_R5_error_t err;
484+
485+
response = sara_r5_calloc_char(sizeof(imeiResponse) + 16);
533486

534487
err = sendCommandWithResponse(SARA_R5_COMMAND_IMEI,
535488
SARA_R5_RESPONSE_OK, response, SARA_R5_STANDARD_RESPONSE_TIMEOUT);
@@ -544,10 +497,10 @@ String SARA_R5::imei(void)
544497
return String(imeiResponse);
545498
}
546499

547-
String SARA_R5::imsi(void)
500+
String SARA_R5::getIMSI(void)
548501
{
549502
char *response;
550-
char imsiResponse[16] = { 0x00 };
503+
char imsiResponse[16] = { 0x00 }; // E.g. 222107701772423
551504
SARA_R5_error_t err;
552505

553506
response = sara_r5_calloc_char(sizeof(imsiResponse) + 16);
@@ -565,10 +518,10 @@ String SARA_R5::imsi(void)
565518
return String(imsiResponse);
566519
}
567520

568-
String SARA_R5::ccid(void)
521+
String SARA_R5::getCCID(void)
569522
{
570523
char *response;
571-
char ccidResponse[21] = { 0x00 };
524+
char ccidResponse[21] = { 0x00 }; // E.g. +CCID: 8939107900010087330
572525
SARA_R5_error_t err;
573526

574527
response = sara_r5_calloc_char(sizeof(ccidResponse) + 16);
@@ -586,6 +539,48 @@ String SARA_R5::ccid(void)
586539
return String(ccidResponse);
587540
}
588541

542+
String SARA_R5::getSubscriberNo(void)
543+
{
544+
char *response;
545+
char idResponse[21] = { 0x00 };
546+
SARA_R5_error_t err;
547+
548+
response = sara_r5_calloc_char(sizeof(idResponse) + 16);
549+
550+
err = sendCommandWithResponse(SARA_R5_COMMAND_CNUM,
551+
SARA_R5_RESPONSE_OK, response, SARA_R5_STANDARD_RESPONSE_TIMEOUT);
552+
if (err == SARA_R5_ERROR_SUCCESS)
553+
{
554+
if (sscanf(response, "\r\n+CCID: %s", idResponse) != 1)
555+
{
556+
memset(idResponse, 0, 21);
557+
}
558+
}
559+
free(response);
560+
return String(idResponse);
561+
}
562+
563+
String SARA_R5::getCapabilities(void)
564+
{
565+
char *response;
566+
char idResponse[128] = { 0x00 }; // E.g. +GCAP: +FCLASS, +CGSM
567+
SARA_R5_error_t err;
568+
569+
response = sara_r5_calloc_char(sizeof(idResponse) + 16);
570+
571+
err = sendCommandWithResponse(SARA_R5_COMMAND_REQ_CAP,
572+
SARA_R5_RESPONSE_OK, response, SARA_R5_STANDARD_RESPONSE_TIMEOUT);
573+
if (err == SARA_R5_ERROR_SUCCESS)
574+
{
575+
if (sscanf(response, "\r\n+GCAP: %s", idResponse) != 1)
576+
{
577+
memset(idResponse, 0, 128);
578+
}
579+
}
580+
free(response);
581+
return String(idResponse);
582+
}
583+
589584
SARA_R5_error_t SARA_R5::reset(void)
590585
{
591586
SARA_R5_error_t err;

0 commit comments

Comments
 (0)