Ви не увійшли.
Сторінки 1
Даже не проверял. Времени катострофически мало. Просто ткнул на 1000. Вообще чем больше тем лучше но я на 1000 еле еле запихал.
Проблему удалось решить 1000uf кондером по питанию
По даташиту параметры остаются с большим запасом например логика 3.6 а транзистор открывается полностью при 2.5в. Мерял напряжение на потребителе 4вольта как и должно быть для питания модуля, однако он включатся без замыкания пинцетом совсем не хочет.
Смотрел микросхемы типа улн2003 но не нашел подходящей так как пиковый порог sim800l 2 ампера а те микросхемы 500-1000 милиампер.
Доброго времени суток. Столкнулся с такой проблемой. Имеются работающие в связке arduino, gsm sim800l и gps neo6m. Питание gsm и gps модулями управляется н канальными мосфетами в режиме ключа через землю.
Проблема заключается в том, что програмно включается без проблем только gps модуль, а вот при установке gsm модуля плата вообще не стартует пока на секунду не замкну пинцетом сток и исток и только после этого плата начинает работать и gsm модуль включается.
В чем может быть проблема? Пробовал разные транзисторы включая биполярные.
Нет. Только rx tx через отдельный конвертор pl2003. Исходя из Вашего вопроса, мне в голову приходит мысль, что китайский ch340, который имеется на китайской уно умеет ногой делать reset. Или я опять пошел не по той дороге?
Доброго времени суток. Столкнулся с такой проблемой.
Развел плату под мега328 залил в нее бутлоадер ардуино через usbasp, с первого старта скетч залился через uart без проблем, а потом при каждой заливке скетча необходимо в нужный момент дергать reset, иначе скетч не заливается.
Несколько позже переделал плату полностью, однако проблема осталась. Читал я гдето, что можно каким то образом включить watchdog и это решит проблему, но я немогу найти такой бутлоадер под 8мгц.
Еще позднее, я узнал, что во многих arduino из китая присутствует такая же проблема дергания reset при заливке скетча. Помогите пожалуйста выявить причину проблем и выбрать путь ее решения.
о, чотенько. А чего через жопу?
Как убрать последние 2 символа в 4634.54557, (запятая и семерка), чтоб получилось 4634.5455 ?
#include "string.h"
char *s = "$GPRMC,214603.000,A,4634.54557,N,03047.50473,E,0.00,0.00,040617,,,A*6E";
char *p;
void setup(void) {
Serial.begin(115200);
p = strchr(s, 'A') + 2; // тут начало от А +2 символа
p = strtok(p, "N"); // тут после , обрезает лишнее но как сделать типо -2 ?
Serial.println(p);
}
void loop(void) {}
Получилось получить 03047.50473 то, что в принципе и нужно, но опять таки как убрать тут последнюю цифру?
#include "string.h"
char s[] ="$GPRMC,214603.000,A,4634.54557,N,03047.50473,E,0.00,0.00,040617,,,A*6E";
char * p;
int a = 0;
void setup(void) {
Serial.begin(115200);
p = strtok (s,",");
for(int i=0; p != NULL; i++)
{
a++;
if (a == 5) { // тут указываю число расчлененной части S
Serial.println(p);
}
p = strtok (NULL, ",");
}
}
void loop(void) {}
Elmirus3 если забить на пробки то "to GIS" но пару разпод знак пускал.
скиньте в личку viber / скайп я обьясню
0634259229 можно и так)
"Вряд ли здесь кто то захочет писать Вам парсинг (если у него готового нет) smile ."
Я Одессе по старой памяти сделаю )
как упоительные были ночные брожения с пивзавода по проспекту Шевченко ))))
хотя вчера так ругался !!! когда нахренатор ( испоганили таки "товарищи" с mail.ru maps.me ) через центр пустил вместо того что б через Авангард рвануть. но ет не по делу )
Да без майла жостко с пробками. Я в прошлом месяце в Киеве с гуглкартами потерялся((
За либу спасибо, ее призывать так как и tinygps++?)
То есть приходит в монитор порта вот такая шняга и из 2й строки $GPRMC нужно оставить хотя бы выделенное красным:
2я строка как раз нужного формата, но как убрать в ней по последней цифре в долготе и широте?
Получается, левые 2 цифры, при наличии которых сервер отказывается показывать местоположение:
отправляю данные вот такой функцией:
//разбиваю одну строку на несколько, что б в функции вместо тестового cord применять message где и должны хранится координаты
const char resource[] = "130402213013,+380688260000,GPRMC,175135.000,A,";
const char cord[] = "6146.4979,N,03421.2399,E"; //вот такие координаты может принять сервер
const char stat[] = ",1.92,21.48,100817,,,A*5B,F,, imei:867567021260000,00,-16.4,F:3.73V,0,139,49646,250,99,1478,68A7\n\r";
void TcpGprsMessage(String message){
sendData("AT+CREG?",3000,DEBUG);
sendData("AT+CGATT=1",1000,DEBUG);
sendData("AT+CGDCONT=1,\"IP\",\"www.ab.kyivstar.net\"",1000,DEBUG);
sendData("AT+CGACT=1,1",1000,DEBUG);
sendData("AT+CIPSTART=\"TCP\",\"88.198.136.232\",10001",3000,DEBUG);
sendData("AT+CIPSEND=80",1000,DEBUG);
sendData(String("GET ") + resource + cord + stat, 2000,DEBUG);
delay(1000);
sendData("AT+CIPCLOSE",2000,DEBUG); //Close TCP
delay(100);
}
Сам код:
#define DEBUG true
char byteGPS=-1;
char linea[300] = "";
char comandoGPR[7] = "$GPRMC";
int cont=0;
int bien=0;
int conta=0;
int indices[13];
int GPS_time=30; // When the board gets the 30 times location information successfully and the location information will be send by sms.
String target_phone = "+380634250000"; // Your phone number,be careful need to add a country code before the cellphone number
String GPS_position="";
int GPS_position_count=0;
const char resource[] = "130402213013,+380688260000,GPRMC,175135.000,A,";
const char cord[] = "6146.4979,N,03421.2399,E";
const char stat[] = ",1.92,21.48,100817,,,A*5B,F,, imei:867567021260000,00,-16.4,F:3.73V,0,139,49646,250,99,1478,68A7\n\r";
void setup()
{
Serial.begin(115200);
Serial1.begin(115200);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(8,OUTPUT);
digitalWrite(5, HIGH);
digitalWrite(4, LOW);
digitalWrite(8, LOW);
delay(2000);
digitalWrite(8, HIGH);
delay(3000);
digitalWrite(8, LOW);
Serial.println("A7 Power ON!");
sendData("AT+GPS=0",3000,DEBUG); //Close GPS
for(int i=0;i<2;i++){ //Make sure the GPS has been turned on
sendData("AT+GPSRD=1",1000,DEBUG);
Serial1.println("AT+GPS=1");
}
Serial.println("*********************************************************");
Serial.println("**If don`t display 'GPS positioning....',please reboot.**");
Serial.println("*********************************************************");
}
void loop()
{
testgps();
}
void testgps(){
while(Serial1.available()){
byteGPS=Serial1.read();
// Read a byte of the serial port
if (byteGPS == -1) {
// See if the port is empty yet
}
else {
// note: there is a potential buffer overflow here!
linea[conta]=byteGPS; // If there is serial port data, it is put in the buffer
conta++;
//Serial.print(byteGPS); // '//',есди удалить то будут отправлятся все данные
if (byteGPS==13){
// If the received byte is = to 13, end of transmission
// note: the actual end of transmission is <CR><LF> (i.e. 0x13 0x10)
cont=0;
bien=0;
// The following for loop starts at 1, because this code is clowny and the first byte is the <LF> (0x10) from the previous transmission.
for (int i=1;i<7;i++){ // Verifies if the received command starts with $GPR
if (linea[i]==comandoGPR[i-1]){
bien++;
}
}
if(bien==6){
// If yes, continue and process the data
//Data Partitioning
for (int i=0;i<300;i++){
if (linea[i]==','){ // check for the position of the "," separator
// note: again, there is a potential buffer overflow here!
indices[cont]=i;
cont++;
}
if (linea[i]=='*'){ // ... and the "*"
indices[12]=i;
cont++;
}
}
//panel data, for example:Direction (E/W):Longitude-Direction(N/S):Latitude<--->E:11350.51872-N:2236.40687
for(int i=5;i>1;i--){
for (int j=indices[i];j<(indices[i+1]-1);j++){
GPS_position+=linea[j+1];
}
if((i==5)||(i==3)){
GPS_position+=":";
}else if(i==4){
GPS_position+="-";
}
}
//If the return ":-:", it means empty data, continue positioning
if(GPS_position==":-:"){
Serial.println("GPS positioning....");
}else{
Serial.println(GPS_position);
GPS_position_count++;
//When GPS_position_count is equivalent to GPS_time, stop positioning and start to send sms messages
if(GPS_position_count==GPS_time){
GPS_position_count=0; //Reset count
sendData("AT+GPS=0",1000,DEBUG);
delay(1000);
//SendTextMessage(GPS_position); //SMS
TcpGprsMessage(GPS_position); //Internet
sendData("AT+GPS=1",1000,DEBUG);
}
}
}
GPS_position="";
conta=0; // Reset the buffer
for (int i=0;i<300;i++){ //
linea[i]=' ';
}
}
}
}
}
void TcpGprsMessage(String message){
sendData("AT+CREG?",3000,DEBUG);
sendData("AT+CGATT=1",1000,DEBUG);
sendData("AT+CGDCONT=1,\"IP\",\"www.ab.kyivstar.net\"",1000,DEBUG);
sendData("AT+CGACT=1,1",1000,DEBUG);
sendData("AT+CIPSTART=\"TCP\",\"88.198.136.232\",10001",3000,DEBUG);
sendData("AT+CIPSEND=80",1000,DEBUG);
sendData(String("GET ") + resource + message + stat, 2000,DEBUG);
delay(1000);
sendData("AT+CIPCLOSE",2000,DEBUG); //Close TCP
delay(100);
//sendData(String("GET ") + resource + imei + message,2000,DEBUG);
}
void SendTextMessage(String message)
{
sendData("AT+CMGF=1",5000,DEBUG); //Set the SMS in text mode
delay(100);
sendData("AT+CMGS="+target_phone,2000,DEBUG);//send sms message to the cellphone , be careful need to add a country code before the cellphone number
delay(100);
sendData(message,2000,DEBUG); //the content of the message
delay(100);
Serial1.println((char)26); //the ASCII code of the ctrl+z is 26
delay(100);
sendData("",1000,DEBUG); //Clear serial data
delay(100);
}
void sendData(String command, const int timeout, boolean debug)
{
String response = "";
Serial1.println(command);
long int time = millis();
while( (time+timeout) > millis()){
while(Serial1.available()){
response += (char)Serial1.read();
}
}
if(debug){
Serial.print(response);
}
}
Добрый вечер, подскажите пожалуйста как правильно парсить координаты NMEA, или как изменить формат координат, которые извлекают уже существующие библиотеки
Например, нужно соорудить такую строчку: 130402213013,+380680000000,GPRMC,173013.000,A,6146.4979,N,03421.2399,E,1.92,21.48,020413,,,A*5B,F,, imei:867567020000000,00,-16.4,F:3.73V,0,139,49646,250,99,1478,68A7\n\r
От GPS модуля приходит такая вот штуковина: $GPRMC,214603.000,A,4634.54557,N,03047.50473,E,0.00,0.00,040617,,,A*6E
То есть мне нужно извлечь координаты в таком формате 6146.4979,N,03421.2399,E и вставить их в нужную мне строку, которую описывал первой, например присвою их переменным и уже там буду играться как умею, ==НО== парсить, я совсем не умею и когда использовал библиотеку TinyGPS - координаты мне приходили в таком формате: LAT=46.576423 LON=30.788080, то есть проблема у меня в том как при помощи библиотеки или куска кода для парсинга
из этого - 46.576423 30.788080 сделать это вот 4634.54557 03047.50473 ??? Бо и точки не там стоят да и количество цифр совсем не то в каком формате принимает сервер.
Сервер принимает в таком формате 4634.54557 03047.50473, а в таком 46.576423 30.788080 не принимает, помогите пожалуйста!
Добрый вечер, продолжаю ковырять (atmega 32u4 with ai thinker A7 GPRS/GSM/gps с загрузчиком arduino).
Сегодня получилось "поробыты" скетч, при помощи которого удалось отправить на thingspeak.com координаты GPS.
В свою очередь thingspeak дал понять, что координаты пришли в предполагаемом виде: ({"created_at":"2017-08-06T19:08:07Z","entry_id":34,"field1":"E:03047.49695-N:4634.54624"}]})
Как известно thingspeak способен визуализировать полученные координаты на карте. Однако, я не могу нигде найти, а также понять в каком именно формате thingspeak должен получить координаты, что бы их отобразить на карте и вообще как в этом сервисе это настроить? На данный момент получилось только разобраться с диаграммами в thingspeak.
Вынужден снова взывать о помощи, так как информации о вышеизложенном в интернете найти не могу, а читая всё с нуля про программирование ардуино до меня ничего не доходит, как как учиться могу лишь путём ошибок и метода тыка, увы такова моя сущность(((
Скетч отправляющий полученные координаты на thingspeak.com:
#define DEBUG true
char byteGPS=-1;
char linea[300] = "";
char comandoGPR[7] = "$GPRMC";
int cont=0;
int bien=0;
int conta=0;
int indices[13];
int GPS_time=30; // When the board gets the 30 times location information successfully and the location information will be send by sms.
String target_phone = "+380634259229"; // Your phone number,be careful need to add a country code before the cellphone number
String GPS_position="";
int GPS_position_count=0;
const char resource[] = "http://api.thingspeak.com/update?key=CE4ZIMSDTBOFTYNX&field1=";
const char coord[] = "12";
void setup()
{
Serial.begin(115200);
Serial1.begin(115200);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(8,OUTPUT);
digitalWrite(5, HIGH);
digitalWrite(4, LOW);
digitalWrite(8, LOW);
delay(2000);
digitalWrite(8, HIGH);
delay(3000);
digitalWrite(8, LOW);
Serial.println("A7 Power ON!");
sendData("AT+GPS=0",3000,DEBUG); //Close GPS
for(int i=0;i<2;i++){ //Make sure the GPS has been turned on
sendData("AT+GPSRD=1",1000,DEBUG);
Serial1.println("AT+GPS=1");
}
Serial.println("*********************************************************");
Serial.println("**If don`t display 'GPS positioning....',please reboot.**");
Serial.println("*********************************************************");
}
void loop()
{
testgps();
}
void testgps(){
while(Serial1.available()){
byteGPS=Serial1.read();
// Read a byte of the serial port
if (byteGPS == -1) {
// See if the port is empty yet
}
else {
// note: there is a potential buffer overflow here!
linea[conta]=byteGPS; // If there is serial port data, it is put in the buffer
conta++;
//Serial.print(byteGPS); //If you delete '//', you will get the all GPS information
if (byteGPS==13){
// If the received byte is = to 13, end of transmission
// note: the actual end of transmission is <CR><LF> (i.e. 0x13 0x10)
cont=0;
bien=0;
// The following for loop starts at 1, because this code is clowny and the first byte is the <LF> (0x10) from the previous transmission.
for (int i=1;i<7;i++){ // Verifies if the received command starts with $GPR
if (linea[i]==comandoGPR[i-1]){
bien++;
}
}
if(bien==6){
// If yes, continue and process the data
//Data Partitioning
for (int i=0;i<300;i++){
if (linea[i]==','){ // check for the position of the "," separator
// note: again, there is a potential buffer overflow here!
indices[cont]=i;
cont++;
}
if (linea[i]=='*'){ // ... and the "*"
indices[12]=i;
cont++;
}
}
//panel data, for example:Direction (E/W):Longitude-Direction(N/S):Latitude<--->E:11350.51872-N:2236.40687
for(int i=5;i>1;i--){
for (int j=indices[i];j<(indices[i+1]-1);j++){
GPS_position+=linea[j+1];
}
if((i==5)||(i==3)){
GPS_position+=":";
}else if(i==4){
GPS_position+="-";
}
}
//If the return ":-:", it means empty data, continue positioning
if(GPS_position==":-:"){
Serial.println("GPS positioning....");
}else{
Serial.println(GPS_position);
GPS_position_count++;
//When GPS_position_count is equivalent to GPS_time, stop positioning and start to send sms messages
if(GPS_position_count==GPS_time){
GPS_position_count=0; //Reset count
sendData("AT+GPS=0",1000,DEBUG);
delay(1000);
//SendTextMessage(GPS_position); //SMS
TcpGprsMessage(GPS_position); //Internet
sendData("AT+GPS=1",1000,DEBUG);
}
}
}
GPS_position="";
conta=0; // Reset the buffer
for (int i=0;i<300;i++){ //
linea[i]=' ';
}
}
}
}
}
void TcpGprsMessage(String message){
sendData("AT+CREG?",3000,DEBUG);
sendData("AT+CGATT=1",1000,DEBUG);
sendData("AT+CGDCONT=1,\"IP\",\"www.ab.kyivstar.net\"",1000,DEBUG);
sendData("AT+CGACT=1,1",1000,DEBUG);
sendData("AT+CIPSTART=\"TCP\",\"184.106.153.149\",80",3000,DEBUG);
sendData("AT+CIPSEND=80",1000,DEBUG);
sendData(String("GET ") + resource + message,2000,DEBUG);
delay(1000);
//sendData(String("GET ") + resource + + coord + " HTTP/1.0\r\n",100,DEBUG);
}
void SendTextMessage(String message)
{
sendData("AT+CMGF=1",5000,DEBUG); //Set the SMS in text mode
delay(100);
sendData("AT+CMGS="+target_phone,2000,DEBUG);//send sms message to the cellphone , be careful need to add a country code before the cellphone number
delay(100);
sendData(message,2000,DEBUG); //the content of the message
delay(100);
Serial1.println((char)26); //the ASCII code of the ctrl+z is 26
delay(100);
sendData("",1000,DEBUG); //Clear serial data
delay(100);
}
void sendData(String command, const int timeout, boolean debug)
{
String response = "";
Serial1.println(command);
long int time = millis();
while( (time+timeout) > millis()){
while(Serial1.available()){
response += (char)Serial1.read();
}
}
if(debug){
Serial.print(response);
}
}
Посоветуйте какую то библиотеку пожалуйста под GSM модули
хмм... я даже и не представлял, что есть библиотека такая, так как для этого модуля в интернете информации очень мало и библиотеки для него точно нет. Я в дальнейшем планирую пользоваться gps сервисом, но учитывая мой нулевой уровень знания синтаксиса возникает большая трудность. В любом случае попробую поискать описание для библиотеки thingspeak, может что то выйдет.
Помогите пожалуйста отправить координаты на сервер. Плата atmega 32u4 with ai thinker A7 GPRS/GSM/gps с загрузчиком arduino:
- http://forum.arduino.ua/img/members/1620/Elecrow-A7-GSM-GPRS-GPS-Module-with-Mega32U4-3-In-1-Development-Board-GPRS-GPS-Wireless_jpg_640x640.jpg
- http://forum.arduino.ua/img/members/1620/400px-Insert_the_SIM_card.jpg
По совету уважаемых постояльцев данного форума, я пользуюсь сервисом thingspeak.com для тестов.
Вопрос заключается в том, что есть координаты GPS, которые например присвоены переменной i, как ее вставить в последнюю строку, что бы вместо числа 30 отправлялись значения присвоенные переменной i, или это стоит делать как то иначе ?
sendData("GET http://api.thingspeak.com/update?key=CE4ZIMSDTBOFTYNX&field1=30 HTTP/1.0\r\n",100,DEBUG);
^^^-то куда хотел вставить переменную i
код:
void TCP_GPRS(){
sendData("AT+CREG?",3000,DEBUG);
sendData("AT+CGATT=1",1000,DEBUG);
sendData("AT+CGDCONT=1,\"IP\",\"www.ab.kyivstar.net\"",1000,DEBUG);
sendData("AT+CGACT=1,1",1000,DEBUG);
sendData("AT+CIPSTART=\"TCP\",\"184.106.153.149\",80",3000,DEBUG);
sendData("AT+CIPSEND=80",1000,DEBUG);
sendData("GET http://api.thingspeak.com/update?key=CE4ZIMSDTBOFTYNX&field1=30 HTTP/1.0\r\n",100,DEBUG);
}
thingspeak.com
Огромное спасибо!!! То что я искал. Ну очень удобно для теста
Доброго времени суток. Имеется плата atmega 32u4 with ai thinker A7 GPRS/GSM/gps с загрузчиком arduino. Есть желание сделать на ней gps трекер, хоть я и не силен в программировании. Суть вопроса в том, что нужен какойто сервер на который можно было бы отправлять пакеты с координатами и соответственно видеть что пришло для дальнейшей отладки. Говорят что есть какието такие например sparkfun, но к сожалению он не работает, а альтернативы найти не могу.
Сторінки 1