bobdxcool
Member level 5
![Member level 5](/styles/images/ranks/dlevel5.gif)
Guys, I tried connecting gsm and gps modules (ttl pins) to tx n rx of arduino. It did not work.
I am totally confused.
This is what I did.
1. I soldered two wires from tx and rx pins of my gps and gsm boards. (this is because my boards had max 232 ic's on the board and had a rs 232 output, so I soldered 2 wires at the point where the rx and tx pins of gsm/ gps are connected to max 232)
2. I connected the tx pin of gsm to rx pin (pin 0) of arduino uno and rx of gsm to tx (pin1) of
arduino. I did this for both gsm and gps modules separately.
3. I just made 2 connections b/w arduino and gsm/gps. No other connections. I powered both the modules using 12v ac/dc adapter connected to the power pin provided on the board. I did not connect the grounds of gsm/gps to arduino or to each other.
GSM module used- sim300
GPS module used- Holux GR-87- baud-4800
The arduino tx and rx pins give 5v, whereas the gps and gsm modules (not boards) rx and tx pins give voltage under 4v (3.3v, 2.9v) .
Is this the problem?
Please help.
This is code I used for testing gsm-sending message to a number
Code for testing gps
This code gave number of received characters, but did not show any latitude and longitude.
- - - Updated - - -
These are pictures of my gps and gsm modules.
![2013-02-05 19.06.57.jpg 2013-02-05 19.06.57.jpg](https://www.edaboard.com/data/attachments/28/28601-90f8d49bddc9d5397ccde488cc8b8f9d.jpg)
GPS module
![2013-02-05 18.59.34.jpg 2013-02-05 18.59.34.jpg](https://www.edaboard.com/data/attachments/28/28598-48c8a3094f3a396f0520d6e56b055b2b.jpg)
GSM module
I am totally confused.
This is what I did.
1. I soldered two wires from tx and rx pins of my gps and gsm boards. (this is because my boards had max 232 ic's on the board and had a rs 232 output, so I soldered 2 wires at the point where the rx and tx pins of gsm/ gps are connected to max 232)
2. I connected the tx pin of gsm to rx pin (pin 0) of arduino uno and rx of gsm to tx (pin1) of
arduino. I did this for both gsm and gps modules separately.
3. I just made 2 connections b/w arduino and gsm/gps. No other connections. I powered both the modules using 12v ac/dc adapter connected to the power pin provided on the board. I did not connect the grounds of gsm/gps to arduino or to each other.
GSM module used- sim300
GPS module used- Holux GR-87- baud-4800
The arduino tx and rx pins give 5v, whereas the gps and gsm modules (not boards) rx and tx pins give voltage under 4v (3.3v, 2.9v) .
Is this the problem?
Please help.
This is code I used for testing gsm-sending message to a number
Code C - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #include <NewSoftSerial.h> NewSoftSerial cell(0,1); char mobilenumber[] = "xxxxxxxxx"; // Replace xxxxxxxx with the recipient's mobile number void setup() { //Initialize serial ports for communication. cell.begin(4800); delay(3500); // give the GSM module time to initialise, locate network etc. // this delay time varies. Use example 26.1 sketch to measure the amount // of time from board reset to SIND: 4, then add five seconds just in case } void loop() { cell.println("AT+CMGF=1"); // set SMS mode to text cell.print("AT+CMGS="); // now send message... cell.print(34,BYTE); // ASCII equivalent of " cell.print(mobilenumber); cell.println(34,BYTE); // ASCII equivalent of " delay(500); // give the module some thinking time cell.print("They call me the count... because I like to count! Ah ha ha ha"); // our message to send cell.println(26,BYTE); // ASCII equivalent of Ctrl-Z delay(15000); // the SMS module needs time to return to OK status do // You don't want to send out multiple SMSs.... or do you? { delay(1); } while (1>0); }
Code for testing gps
Code C - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 #include <NewSoftSerial.h> #include <TinyGPS.h> /* This sample code demonstrates the normal use of a TinyGPS object. It requires the use of NewSoftSerial, and assumes that you have a 4800-baud serial GPS device hooked up on pins 0(rx) and 1(tx). */ TinyGPS gps; NewSoftSerial nss(0, 1); static void gpsdump(TinyGPS &gps); static bool feedgps(); static void print_float(float val, float invalid, int len, int prec); static void print_int(unsigned long val, unsigned long invalid, int len); static void print_date(TinyGPS &gps); static void print_str(const char *str, int len); void setup() { Serial.begin(115200); nss.begin(4800); Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version()); Serial.println("by Mikal Hart"); Serial.println(); Serial.print("Sizeof(gpsobject) = "); Serial.println(sizeof(TinyGPS)); Serial.println(); Serial.println("Sats HDOP Latitude Longitude Fix Date Time Date Alt Course Speed Card Distance Course Card Chars Sentences Checksum"); Serial.println(" (deg) (deg) Age Age (m) --- from GPS ---- ---- to London ---- RX RX Fail"); Serial.println("--------------------------------------------------------------------------------------------------------------------------------------"); } void loop() { bool newdata = false; unsigned long start = millis(); // Every second we print an update while (millis() - start < 1000) { if (feedgps()) newdata = true; } gpsdump(gps); } static void gpsdump(TinyGPS &gps) { float flat, flon; unsigned long age, date, time, chars = 0; unsigned short sentences = 0, failed = 0; static const float LONDON_LAT = 51.508131, LONDON_LON = -0.128002; print_int(gps.satellites(), TinyGPS::GPS_INVALID_SATELLITES, 5); print_int(gps.hdop(), TinyGPS::GPS_INVALID_HDOP, 5); gps.f_get_position(&flat, &flon, &age); print_float(flat, TinyGPS::GPS_INVALID_F_ANGLE, 9, 5); print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 10, 5); print_int(age, TinyGPS::GPS_INVALID_AGE, 5); print_date(gps); print_float(gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 8, 2); print_float(gps.f_course(), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2); print_float(gps.f_speed_kmph(), TinyGPS::GPS_INVALID_F_SPEED, 6, 2); print_str(gps.f_course() == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(gps.f_course()), 6); print_int(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0UL : (unsigned long)TinyGPS::distance_between(flat, flon, LONDON_LAT, LONDON_LON) / 1000, 0xFFFFFFFF, 9); print_float(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : TinyGPS::course_to(flat, flon, 51.508131, -0.128002), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2); print_str(flat == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON)), 6); gps.stats(&chars, &sentences, &failed); print_int(chars, 0xFFFFFFFF, 6); print_int(sentences, 0xFFFFFFFF, 10); print_int(failed, 0xFFFFFFFF, 9); Serial.println(); } static void print_int(unsigned long val, unsigned long invalid, int len) { char sz[32]; if (val == invalid) strcpy(sz, "*******"); else sprintf(sz, "%ld", val); sz[len] = 0; for (int i=strlen(sz); i<len; ++i) sz[i] = ' '; if (len > 0) sz[len-1] = ' '; Serial.print(sz); feedgps(); } static void print_float(float val, float invalid, int len, int prec) { char sz[32]; if (val == invalid) { strcpy(sz, "*******"); sz[len] = 0; if (len > 0) sz[len-1] = ' '; for (int i=7; i<len; ++i) sz[i] = ' '; Serial.print(sz); } else { Serial.print(val, prec); int vi = abs((int)val); int flen = prec + (val < 0.0 ? 2 : 1); flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1; for (int i=flen; i<len; ++i) Serial.print(" "); } feedgps(); } static void print_date(TinyGPS &gps) { int year; byte month, day, hour, minute, second, hundredths; unsigned long age; gps.*****_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age); if (age == TinyGPS::GPS_INVALID_AGE) Serial.print("******* ******* "); else { char sz[32]; sprintf(sz, "%02d/%02d/%02d %02d:%02d:%02d ", month, day, year, hour, minute, second); Serial.print(sz); } print_int(age, TinyGPS::GPS_INVALID_AGE, 5); feedgps(); } static void print_str(const char *str, int len) { int slen = strlen(str); for (int i=0; i<len; ++i) Serial.print(i<slen ? str[i] : ' '); feedgps(); } static bool feedgps() { while (nss.available()) { if (gps.encode(nss.read())) return true; } return false; }
This code gave number of received characters, but did not show any latitude and longitude.
- - - Updated - - -
These are pictures of my gps and gsm modules.
![2013-02-05 19.06.57.jpg 2013-02-05 19.06.57.jpg](https://www.edaboard.com/data/attachments/28/28601-90f8d49bddc9d5397ccde488cc8b8f9d.jpg)
GPS module
![2013-02-05 18.59.34.jpg 2013-02-05 18.59.34.jpg](https://www.edaboard.com/data/attachments/28/28598-48c8a3094f3a396f0520d6e56b055b2b.jpg)
GSM module