Borombo96
Вторник 21 августа 2018 г. 15:14
Привет,
Я работаю над приложением, в котором используется плата прорыва SIM7000 и STM32L053R8 (с платой расширения I-NUCLEO-LRWAN1).
Теперь я должен прочитать данные из GPS с SIM7000 в сериале STM32L0.
Когда чип соединяется со спутником, я прочитал это в сериале:
AT+CGNSINF
+Cgnsinf: 0,,,,,,,,,,,,,,,,,,,,
ХОРОШО
Команд отправить
AT+CGNSINF
+CNGSINF: 1,0 ,,,,,, 0 ,,,,, 1 ,,, 49,,
ХОРОШО
Команд отправить
Муравей, это нормально.. Но когда он подключается к спутнику, я прочитал на сериале:
Команд отправить
AT+CGNSINF
+CGNSINF: 1,1,20180821145743.000,38.121140,15.666
Команд отправить
AT+CGNSINF
+CGNSINF: 1,120180821145745.000,38.121241,15.665
Команд отправить
AT+CGNSINF
+CGNSINF: 1,1,20180821145747.000,38.121229,15.665
Я не понимаю, почему данные после +cgnsinf не полны, на самом деле это должно быть что -то вроде:
AT+CGNSINF
+CGNSINF: 1,1,20180821151003.000,38.121095,15.666267,80.200,0.00,0.0,1, 0.7,1.0,0.7, 18,10 ,,, 46,,
Код, который я использую, это:
Я работаю над приложением, в котором используется плата прорыва SIM7000 и STM32L053R8 (с платой расширения I-NUCLEO-LRWAN1).
Теперь я должен прочитать данные из GPS с SIM7000 в сериале STM32L0.
Когда чип соединяется со спутником, я прочитал это в сериале:
AT+CGNSINF
+Cgnsinf: 0,,,,,,,,,,,,,,,,,,,,
ХОРОШО
Команд отправить
AT+CGNSINF
+CNGSINF: 1,0 ,,,,,, 0 ,,,,, 1 ,,, 49,,
ХОРОШО
Команд отправить
Муравей, это нормально.. Но когда он подключается к спутнику, я прочитал на сериале:
Команд отправить
AT+CGNSINF
+CGNSINF: 1,1,20180821145743.000,38.121140,15.666
Команд отправить
AT+CGNSINF
+CGNSINF: 1,120180821145745.000,38.121241,15.665
Команд отправить
AT+CGNSINF
+CGNSINF: 1,1,20180821145747.000,38.121229,15.665
Я не понимаю, почему данные после +cgnsinf не полны, на самом деле это должно быть что -то вроде:
AT+CGNSINF
+CGNSINF: 1,1,20180821151003.000,38.121095,15.666267,80.200,0.00,0.0,1, 0.7,1.0,0.7, 18,10 ,,, 46,,
Код, который я использую, это:
HardwareSerial SerialForSim7000(PA_10, PA_9);
HardwareSerial SerialLora(PC_11, PC_10);
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
SerialForSim7000.begin(9600);
SerialForSim7000.write("AT+CGNSCFG=1 \r\n");
delay(500);
SerialForSim7000.write("AT+CGNSPWR=1 \r\n");
delay(500);
}
void loop() // run over and over
{
SerialForSim7000.write("AT+CGNSINF \r\n");
while(SerialForSim7000.available())
Serial.write(SerialForSim7000.read());
Serial.println();
Serial.write("comand send");
Serial.println();
delay(2000);
}
Эдогальдо
Вторник 21 августа 2018 г. 15:39
Попробуйте проверить размер буфера для чтения SerialForsIm7000.
Borombo96
Вторник 21 августа 2018 г. 18:46
[Эдогальдо - Вторник 21 августа 2018 г. 15:39] - Попробуйте проверить размер буфера для чтения SerialForsIm7000.Как я могу проверить это?
Могу ли я исправить это с более низкой скоростью бода?
Тай
Borombo96
Чт 23 августа 2018 г., 11:25
Кто -то может мне помочь, как я могу увеличить размер буфера? Я читаю, что модификация библиотеки не очень хорошая вещь..
Тай 4 Помощь
Тай 4 Помощь
Borombo96
Вторник 28 августа 2018 г. 8:29
Кто -то может мне помочь?
Мадиас
Вторник 28 августа 2018 11:31
Вы можете попытаться наверстать упущенное.читать(); в массив и после окончания просто распечатать массив сериалом.печать
Мадиас
Вторник 28 августа 2018 г. 11:35
Я не владею правлением или LRWAN, но после некоторого Google:
Вы можете попытаться поднять буфер здесь:
https: // github.com/stm32duino/i-nucleo- ... HW_USART.час
Строка 53: #define serial_rx_buffer_size 256
Я бы попробовал 512 или что -то в этом роде.
Если это работает, пожалуйста, откройте проблему на GitHub.
Вы можете попытаться поднять буфер здесь:
https: // github.com/stm32duino/i-nucleo- ... HW_USART.час
Строка 53: #define serial_rx_buffer_size 256
Я бы попробовал 512 или что -то в этом роде.
Если это работает, пожалуйста, откройте проблему на GitHub.
Borombo96
Пт 31 августа 2018 г. 8:29
[Мадиас - Вторник 28 августа 2018 г. 11:35] - Я не владею правлением или LRWAN, но после некоторого Google:Тай за помощь мадам!
Вы можете попытаться поднять буфер здесь:
https: // github.com/stm32duino/i-nucleo- ... HW_USART.час
Строка 53: #define serial_rx_buffer_size 256
Я бы попробовал 512 или что -то в этом роде.
Если это работает, пожалуйста, откройте проблему на GitHub.
Я пробую это, но это не работает. Это код
#include "LoRaRadio.h"
#include "lora_driver.h"
HardwareSerial SerialForSim7000(PA_10, PA_9);
HardwareSerial SerialLora(PC_11, PC_10);
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
SerialForSim7000.begin(9600);
SerialForSim7000.write("AT+CGNSCFG=1 \r\n");
delay(500);
SerialForSim7000.write("AT+CGNSPWR=1 \r\n");
delay(500);
}
void loop() // run over and over
{
SerialForSim7000.write("AT+CGNSINF \r\n");
while(SerialForSim7000.available())
Serial.write(SerialForSim7000.read());
Serial.println();
Serial.write("comand send");
Serial.println();
delay(2000);
}
fpistm
Пн сентября 03, 2018 8:54 утра
Попробуйте не вызывать Serialforsim7000.Читать в сериале.писать:
Serial.write(SerialForSim7000.read());
Borombo96
Пн сентября 03, 2018, 16:06
Я исправил его с небольшой задержкой, поэтому сериал начинает печатать результат после некоторых байтов...
char risp[94];
String latval;
double lat;
String longval;
HardwareSerial SerialForSim7000(PA_10, PA_9);
HardwareSerial SerialLora(PC_11, PC_10);
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
SerialForSim7000.begin(9600);
SerialForSim7000.write("AT+CGNSCFG=1 \r\n");
delay(500);
SerialForSim7000.write("AT+CGNSPWR=1 \r\n");
delay(500);
}
void loop() // run over and over
{
SerialForSim7000.write("AT+CGNSINF \r\n");
delay(30);
while(SerialForSim7000.available()){
for(int n=0; n<94; n++)
{
risp[n] = SerialForSim7000.read(); //here I put the char into array
}
}
Serial.println();
Serial.write("comand send");
Serial.println();
for(int n=36;n<55;n++){
Serial.print(risp[n]); //I print the arry
}
Serial.println();
for(int n=36; n<45;n++)
latval += risp[n]; //I put the firs part ofarray into a String
Serial.println(latval);
float lat=latval.toFloat(); //convert a string into floa
Serial.println(lat);
latval=""; //clen string
delay(2000);
}
fpistm
Вторник 04 сентября 2018 г. 10:16 утра
Я сделал пиар, чтобы добавить к сути:
https: // github.com/stm32duino/arduino_c ... 2/тяга/313
Я тестировал с этим эскизом на основе вашего:
https: // github.com/stm32duino/arduino_c ... 2/тяга/313
Я тестировал с этим эскизом на основе вашего:
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
for (uint32_t n = 0; n < sizeof(risp); n++) {
Serial.print(risp[n]); //I print the array
}
Serial.println();
for (uint32_t n = 0; n < 9; n++)
latval += risp[n]; //I put the firs part ofarray into a String
Serial.println(latval);
float flat = latval.toFloat(); //convert a string into float
Serial.println(flat);
lat = latval.toDouble(); //convert a string into double
Serial.println(lat, 6);
}
void loop() // run over and over
{
}
Borombo96
Вторник 04 сентября 2018 14:08
Я сделал изменение в библиотеке, но у меня есть эта ошибка:
'Class String' не имеет члена "Toduble"
это код в файле wstring.CPP: (строка 741-750)
'Class String' не имеет члена "Toduble"
это код в файле wstring.CPP: (строка 741-750)
float String::toFloat(void) const
{
return float(toDouble());
}
double String::toDouble(void) const
{
if (buffer) return atof(buffer);
return 0;
}
fpistm
Вторник 04 сентября 2018 14:28
[Borombo96 - Вторник 04 сентября 2018 г. 14:08] - Это корень файла wstring.H и WSTRING.CPP C: \ Program Files (x86) \ arduino \ ardware \ arduino \ avr \ cores \ arduinoЭто не правильное ядро, это AVR Core, а не STM32.
Вы можете найти источник, используя это:
https: // github.com/stm32duino/wiki/wiki ... Повторные находки
Borombo96
Сб 08 сентября 2018 12:03
Тай, это работа
Я думаю, что бод для SIM7000 - 115200. Я видел 9600 в вашем коде и удивился... Я новичок в SIM7000G, но провел весь день сегодня, изучая команды AT...