I’m want to use my MKR GSM 1400 board and using Hologram Sim to send the data to the hologram cloud. The board is using the same GSM module like Dash. As far as I know there is already a library to send the data to the cloud but i think this library is only compatible for Dash board. Is there any information/library on how could I send the data?
Based on my assumption of the incompability of the library for MKR board, so I tried to understand what the function i.e HologramCloud.sendMessage() actually do.
But I’m stucked on modem.command() function inside sendMessage() function as I dont really understand what “+HMRST” really mean for. I thought that it maybe one of the AT command for U201 module. But there is no reference on it as I look at the manual. So I assume it is the command for Hologram server side. Am I right?
Hi, can you post some of your code on how you have got your MKR1400 connected? I’ve been struggling with this for a few weeks now. I would be grateful for any help. Thanks
@millsy I just ran into this post and wanted to share some code that I wrote to get the Arduino GSM MKR to send Cloud Data Messages to the Hologram Dashboard using our Embedded API
/*Hologram Adaptation of Arduino's GSM Web Client Example Sketch used to send messages to Hologram's Cloud
Arduino information:
Web client
Circuit:
* MKR GSM 1400 board
* Antenna
* SIM card with a data plan
created 8 Mar 2012
by Tom Igoe
modified 15 May 2017
by Maiky Iberkleid
*/
// libraries
#include <MKRGSM.h>
//We replaced "arduino_secrets.h" as all the information for that is publicly available from https://hologram.io/docs/guide/connect/connect-device/#apn-settings
const char PINNUMBER[] = " ";
// APN data
const char GPRS_APN[] = "hologram";
const char GPRS_LOGIN[] = " ";
const char GPRS_PASSWORD[] = " ";
String HOLOGRAM_API_KEY = "YOUR HOLOGRAM API KEY";
String HOLOGRAM_MESSAGE = "Your Message here";
String HOLOGRAM_TOPIC = "TOPIC";
// initialize the library instance
GSMClient client;
GPRS gprs;
GSM gsmAccess;
// Hologram's Embedded API (https://hologram.io/docs/reference/cloud/embedded/) URL and port
char server[] = "cloudsocket.hologram.io";
int port = 9999;
void setup() {
// initialize serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.println("Starting Arduino web client.");
// connection state
boolean connected = false;
// After starting the modem with GSM.begin()
// attach to the GPRS network with the APN, login and password
while (!connected) {
Serial.println("Begin MSM Access");
//Serial.println(gsmAccess.begin()); //Uncomment for testing
if ((gsmAccess.begin() == GSM_READY) &&
(gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD) == GPRS_READY)) {
connected = true;
Serial.println("GSM Access Success");
}
else {
Serial.println("Not connected");
delay(1000);
}
}
Serial.println("connecting...");
// if you get a connection, report back via serial:
if (client.connect(server, port)) {
Serial.println("connected");
// Send a Message request:
client.println("{\"k\":\"" + HOLOGRAM_API_KEY +"\",\"d\":\""+ HOLOGRAM_MESSAGE+ "\",\"t\":\""+HOLOGRAM_TOPIC+"\"}");
} else {
// if you didn't get a connection to the server:
Serial.println("connection failed");
}
}
void loop() {
// if there are incoming bytes available
// from the server, read them and print them:
if (client.available()) {
char c = client.read();
Serial.print(c);
}
// if the server's disconnected, stop the client:
if (!client.available() && !client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
// do nothing forevermore:
for (;;)
;
}
}
1-sorry for my ignorance, but by activating a sim card and using this code, I could send a message directly out of the box? Or there are additional steps apart from adding the board with “board manager from arduino IDE”?
2-What about data consumption? will it be identical to the Dash?
3-I can not find documentation about consumption in deep sleep, is it similar to the Dash 1.2? Does anyone have this data?
If you have the board in front of you, could you test it just to save time: 1st 10 bytes message with a fresh connection then a second one a minute later. I think Particle user use about 6kb for the first message. I hope this product is not in this range.
@Titus the cloud protocol will determine data usage and not the board. Hologram’s cloud uses TCP and Particle uses UDP. Going further, behind the scenes MQTT uses TCP and CoAP uses UDP.
When using our SIM and the MKR 1400 you can use any cloud and protocol.
There is a possibility our SIM meets your needs but our cloud does not. In that case, I’d recommend looking to integrate 3rd party cloud services like AWS IoT or Adafruit.io Pro
Just got back from MakerFaire - Bay Area. One of my meetings was with Arduino. There are no details I can publish right now, but I wanted to let you all know good things are in the works!
Thanks! Happy to know others have found it useful!
Have you seen Arduino’s page on this? Haven’t experimented myself or looked at the code to verify, but extrapolating a bit I’d think 0 could be the error code and the 3 is GSM_Ready. Does that seem to fit into what you see happening? Also have you posted something about this in Arduino’s forums? If so can you post the link here? I’d love to follow up and see what the real answer is.
I saw literally the exact same thing on my first try.
The “3” is a “invalid credential code.” Likely reason? You may (as I did) have used your general APN key, (the long one), instead of the 8-digit device API. Hologram will generate a unique APN for each SIM. Use that, and you should be good to go! There a “device key” window on the top right of the page for each SIM on you Hologram dashboard.
NOTE: The “3” code here is NOT the one I’m asking about above (which is related to the modem). Odd conicidence, for sure.
Thanks, that was the issue! Now on to see if I can get the MKR 1400 board into a low-power state periodically. Does this happen to be one of your goals as well?
Glad it worked! Yes, low power mode, together with general robustness for data connections after long periods of no communication (hours / days) is what I’m after. That, and figuring out how the power management operates on this thing…
Hello, I have been unsuccessful at connecting the arduino mkr gsm 1400 to hologram. I tried using the boiler plate code and it never works. I have two gsm 1400 boards, neither of them work. I have tried code found here (my equivalent post in arduino forums), also does not work. AT+CREG 0,0 is the error.
#include <MKRGSM.h>
const char PINNUMBER[] = " ";
// APN data
const char GPRS_APN[] = "hologram";
const char GPRS_LOGIN[] = " ";
const char GPRS_PASSWORD[] = " ";
// initialize the library instance
GPRS gprs;
GSM gsmAccess;
void setup() {
// initialize serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.println("Starting Arduino web client.");
// connection state
boolean connected = false;
// After starting the modem with GSM.begin()
// attach to the GPRS network with the APN, login and password
while (!connected) {
Serial.println("Begin GSM Access");
if ((gsmAccess.begin() == GSM_READY) &&
(gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD) == GPRS_READY)) {
connected = true;
Serial.println("GSM Access Success");
}
else {
Serial.println("Not connected");
delay(1000);
}
}
}
void loop() {
}
UPDATE
anyone in the future come across this, the board doesn’t work without the battery, even though it gets power from usb. Works. Never saw any other threads that specifically said this, but the battery is required for anyone who likes to do incremental testing (i.e. test the software before building out the hardware).