Mám Raspberry Pi 3 + kartu SIM7020E od waveshare
Vložená SIM karta funguje. Nemá pin. Modul signalizuje hledání sítě.
Tady je konfigurace.
AT&V
ACTIVE PROFILE
E: 1
L: 0
M: 0
Q: 0
V: 1
X: 4
S0: 0
S1: 0
S2: 43
S3: 13
S4: 10
S5: 8
S6: 2
S7: 60
S8: 2
S10: 15
S12: 50
S25: 5
+CR: 0
+CMEE: 0
+IFC: 0,0
+ICF: 3,3
+CSCS: "IRA"
+IPR: 0
&C: 1
&D: 2
+CGEREP: 0
+CEER: 0
+CGPIAF: 0,0,0,0
+CPSMSTATUS: 1
+CMGF: 0
+CSDH: 0
+CSMINS: 0
+CMUX: 0,0,0,31,10,3,30,10,2
a následně dotazy
-CSQ: 99,99
-CFUN: 1
-COPS: 0
-CGREG: 0,0
-CREG: 0,0
-CEREG: 0,0
-CGDCONT: OK
-CPSI: error
-CEM: error
-CPIN: error
-CRSM: error
-CBAND: 1,3,5,8,20,28
-CSQ: 99,99
mně říká, že nemá signál. Už si nějak nevím rady a rady v zahraničí fungují jinak než mně.
minicom mně hlásí že není dev/modem. Když ho spustím s parametrama, tak se pustí a právě odpovídá viz. výše. Pouštím ho na portu ttyS0. ttyAMA0 nefunguje.
Hovor vytáčí, ale neuskuteční se (logicky - není signál není hovor).
Operátor T-mobile. Zkusil sem jinou SIM - Vodafone a stejný výsledek. SIM kartou to nebude.
Už mně dochází nápady a fantazie.
Co s tím? Prosím.
Asi před 2 lety jsem v jednom projektu používal Waveshare SIM7000E připojenou na ESP32 (použita Vodafone NB IoT karta).
Pro ESP32 jsem k tomu nenašel žádnou knihovnu, takže jsem si musel všechno napsat ručně, ale žádný velký problém s tím pokud si pamatuju nebyl. Nejdřív jsem to odladil s AT Command Testerem a pak příslušné sekvence příkazů naťukal do kódu.
Tady je kousek kódu, kterým jsem to přes sériový port inicializoval, třeba při porovnávání té sekvence příkazů na něco přijdeš:
bool SIM7000E::initGsm(bool full){
gsmReady = false;
bool isReady = false;
cmd("AT");
if(status != "OK")return false;
if(full)initGsmOffOn();
if(full || (cmd("AT+CSQ").indexOf("99,99") != -1) || (cmd("AT+CGREG?").indexOf("0,5") == -1)){
for(int i = 0; i < 15; i++){
isReady = (cmd("AT+CSQ").indexOf("99,99") == -1);
if(isReady)break;
delay(1000);
}
if(!isReady)return false;
for(int i = 0; i < 5; i++){
isReady = (cmd("AT+CGREG?").indexOf("0,5") != -1);
if(isReady)break;
delay(1000);
}
if(!isReady)return false;
}
cmd("AT+CLTS=1");
if(status != "OK")return false;
cmd("AT+CAPNMODE=0");
if(status != "OK")return false;
cmd("AT+CNACT=1","+APP PDP: ACTIVE");
if(status != "OK")return false;
cmd("AT+CGATT=1");
if(status != "OK")return false;
cmd("AT+CIPSHUT","SHUT OK");
if(status != "OK")return false;
cmd("AT+CSTT=\"lpwa.vodafone.iot\"");
if(status != "OK")return false;
cmd("AT+CIICR");
if(status != "OK")return false;
cmd("AT+CIFSR");
cmd("AT+SAPBR=3,1,\"APN\",\"lpwa.vodafone.iot\"");
if(status != "OK")return false;
cmd("AT+SAPBR=1,1");
if(status != "OK")return false;
cmd("AT+SHCONF=\"URL\",\"http://iot.test.cz\"");
if(status != "OK")return false;
cmd("AT+SHCONF=\"HEADERLEN\",350");
if(status != "OK")return false;
cmd("AT+SHCONF=\"BODYLEN\",1024");
if(status != "OK")return false;
cmd("AT+SHCONF=\"TIMEOUT\",60");
if(status != "OK")return false;
cmd("AT+SHCONF=\"IPVER\",0");
if(status != "OK")return false;
gsmReady = true;
return true;
}
bool SIM7000E::initGsmOffOn(){
gsmReady = false;
cmd("AT");
if(status != "OK")return false;
cmd("AT+CFUN=0");
if(status != "OK")return false;
cmd("AT+CBANDCFG=\"NB-IOT\",20");
if(status != "OK")return false;
cmd("AT+CNMP=38");
if(status != "OK")return false;
cmd("AT+CMNB=2");
if(status != "OK")return false;
cmd("AT+CGDCONT=1,\"IP\",\"lpwa.vodafone.iot\"");
if(status != "OK")return false;
cmd("AT+CFUN=1");
if(status != "OK")return false;
}
String SIM7000E::cmd(String command){
return this->cmd(command, "OK", 1000);
}
String SIM7000E::cmd(String command, int timeout){
return this->cmd(command, "OK", timeout);
}
String SIM7000E::cmd(String command, String desiredReply){
return this->cmd(command, desiredReply, 1000);
}
String SIM7000E::cmd(String command, String desiredReply, int timeout){
while (Serial1.available() > 0)Serial1.read();
GsmDebugLog(" GSMDEBUG: command: " + command);
Serial1.println(command);
int start = millis();
String reply1 = "";
while(millis()-start <= timeout){
while (Serial1.available() > 0) {
char x = Serial1.read();
reply1 = reply1 + x;
start = millis();
if(reply1.indexOf("\r\n" + desiredReply + "\r\n") > -1){
reply1.replace("\r\n\r\n","\r\n");
status = "OK";
String logreply = reply1;
logreply.replace("\r\n"," || ");
GsmDebugLog(" GSMDEBUG: Reply: " + String(logreply));
return reply1;
}
}
}
status = "TIMEOUT";
GsmDebugLog(" GSMDEBUG: timeout: " + String(timeout));
GsmDebugLog(" GSMDEBUG: Desired reply: " + String(desiredReply));
GsmDebugLog(" GSMDEBUG: Real reply: " + String(reply1));
return reply1 + "\r\nTIMEOUT";
}