Hi,
I am having powering issues with the MKR 1400 wich I can not seem to solve.
I wrote a simple script to send an test SMS to my cellphone. When I power the MKR to the USB port of my PC it works fine. If I am not mistaking the MKR pulls a short burst of 0,07A when making connection and sending the SMS.
However...
When I power the MKR with a powerbank it does not send the test message with the same script. The powerbank I use is a 15.000mAh and 2A. So this should be sufficient or am I missing something here?
Thanks in advance for any tips/advice.
pert
December 8, 2019, 11:49pm
2
There's some information on GSM communication issues caused by power on the MKR GSM 1400 here that might be relevant to your situation:
opened 08:24PM - 20 Nov 18 UTC
type: imperfection
I've posted this before, but I'll try again. My code is pretty simple. I check f… or SMS messages and then reply back using Hologram's network. I'm using the latest MKRGSM library 1.3.1. I also have a 1400 mAhr lithium battery connected so I'm confident that I don't have a hardware issue related to modem current.
Here's my code:
```
#include <MKRGSM.h>
const char PINNUMBER[] = " ";
const char GPRS_APN[] = "hologram";
const char GPRS_LOGIN[] = " ";
const char GPRS_PASSWORD[] = " ";
String HOLOGRAM_DEVICE_KEY = "********";
String HOLOGRAM_TOPIC = "_SOCKETAPI_";
GSMClient client;
GPRS gprs;
GSM gsm(1); // Enable debug
GSM_SMS sms;
GSMScanner scan;
char server[] = "cloudsocket.hologram.io";
int port = 9999;
boolean isSMSAvailable = false;
char sms_message[145];
void setup() {
Serial.begin(115200);
//while(!Serial);
scan.begin();
connectGSM();
}
void connectGSM() {
boolean connected = false;
while (!connected) {
Serial.println("Begin GSM Access");
if ((gsm.begin() == GSM_READY) &&
(gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD) == GPRS_READY)) {
connected = true;
Serial.println("GSM Access Success");
Serial.println(scan.getCurrentCarrier());
}
else {
Serial.println("Not connected");
delay(1000);
}
}
}
void loop() {
if(Serial.available()) {
char c = Serial.read();
if(c == 'e')
MODEM.debug();
if(c == 'd')
MODEM.noDebug();
}
// Get any new incoming txt messages
int c;
if (sms.available()) {
int i = 0;
while ((c = sms.read()) != -1) {
sms_message[i++] = (char)c;
}
sms_message[i] = '\0'; // Terminate message
isSMSAvailable = true;
sms.flush();
}
if(gsm.isAccessAlive()) {
if(gprs.status() != GPRS_READY) {
if(gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD) == GPRS_READY)
Serial.println("GPRS ready!");
else
Serial.println("GRPS not ready!");
}
}
else {
Serial.println("Reconnect to GSM...");
connectGSM();
}
// Send message back through hologram
if(isSMSAvailable) {
isSMSAvailable = false;
if (client.connect(server, port)) {
client.print("{\"k\":\"" + HOLOGRAM_DEVICE_KEY + "\",\"d\":\"");
client.print(sms_message);
client.println("\",\"t\":\""+HOLOGRAM_TOPIC+"\"}");
client.stop();
}
else {
MODEM.send("AT+USOER");
}
}
delay(1000);
}`
```
It takes anywhere from a few days to a week or more to exhibit the problem. My logs typically look like this, where the incoming SMS message, "Jdjd", gets received and then repeated back to me via Hologram's network.
```
OK
AT+CMGL="REC UNREAD"
+CMGL: 19,"REC UNREAD","+19495472010",,"18/11/14,03:53:24+00"
Jdjd
OK
AT+CMGD=19
OK
AT+CREG?
+CREG: 0,5
OK
AT+USOCR=6
+USOCR: 0
OK
AT+USOCO=0,"cloudsocket.hologram.io",9999
OK
AT+USOWR=0,21,"7B226B223A22433E383375242B57222C2264223A22"
+USOWR: 0,21
OK
AT+USOWR=0,4,"4A646A64"
+USOWR: 0,4
OK
AT+USOWR=0,20,"222C2274223A225F534F434B45544150495F227D"
+USOWR: 0,20
OK
AT+USOWR=0,2,"0D0A"
+USOWR: 0,2
OK
AT+USOCL=0
OK
AT+CMGL="REC UNREAD"
OK
AT+CREG?
+CREG: 0,5`
```
However, after a week or so this happens:
```
`OK
AT+CMGL="REC UNREAD"
+CMGL: 19,"REC UNREAD","+19495472010",,"18/11/20,19:51:00+00"
JDJDJ
OK
AT+CMGD=19
OK
AT+CREG?
+CREG: 0,5
OK
AT+USOCR=6
+USOCR: 0
OK
AT+USOCO=0,"cloudsocket.hologram.io",9999
ERROR
+UUSOCL: 0
AT+USOCL=0
ERROR
AT+CMGL="REC UNREAD"
OK
AT+CREG?
+CREG: 0,5
OK
AT+CMGL="REC UNREAD"
OK
AT+CREG?
+CREG: 0,5
````
From then on, the library is never able to recover.
Any help would be greatly appreciated. The code I submitted is a stripped down version of my application. I've been wanting to release my application using the MKRGSM board but I've been haunted by this issue. I see there's some asynchronous options that aren't well documented and I'm reluctant to use this approach - besides, shouldn't this library be rock solid as documented!