Arduino Nano 33 IoT & NEO 6M GPS Module

I am having trouble getting connection between Arduino Nano 33 IoT and NEO 6M GPS module.

I tried this connection:

Arduino 33 IOT RX0 -> Neo TX,

Arduino 33 IOT TX1 -> Neo RX,

Arduino 33 IOT 3.3V -> Neo VCC,

Arduino 33 IOT GND -> Neo GND,

I tried testing with the sketch below but the serial com is producing ---> ????????
Is it because I'm testing it indoors?

#include <TinyGPS++.h>

void setup() {



void loop() {
if (Serial.available()) {

if (Serial1.available()) {


Any help would be greatly appreciated!
Thanks in advance!

Your post was MOVED to its current location as it is more suitable.

Could you also take a few moments to Learn How To Use The Forum.

Other general help and troubleshooting advice can be found here.
It will help you get the best out of the forum in the future.

Does the GPS get a signal ?
What voltage does the GPS work at ?

When I tried The GPS module with Arduino Uno, it is able to pick up signal.

But when I tried it with Arduino NANO 33 IoT board, the com serial does not show any NMEA message.

The NEO 6M GPS is able to operate at 3.3v-5v range.

RX0 but TX1 ?

Exactly which Nano Serial pins have you got the GPS connected to ?

NANO TX1 pin to NEO RX
NANO RX0 pin to NEO TX

Is my connection wrong?

The "0" and "1" suffixes on the pin labels on the silkscreen are the digital pin numbers:

The RX0 and TX1 pins are a second serial port available as Serial1 so you should be reading GPS data from Serial1 and printing it to Serial (the Serial monitor)

Meaning which pin must I connect on the Nano board?

You connect the GPS to the pins marked TX1 and RX0 and you communicate with the GPS using Serial1

Alright. But to communicate the GPS using Serial1, how do I do that? Do I need to amend the sketch (which part) or?


Your sketch checks whether data is available on Serial and if so, reads from Serial1 and writes it to Serial. It should check whether data is available on Serial1 then read it and write it to Serial

Yes, I have indicated that in the sketch above isn't it?

But I still don't get any NMEA messages in the com serial.

You mean the code that you changed after I pointed out that it was wrong ? Don't change posts, particularly code, that has been commented on as it makes nonsense of the comments.

If you change code then post the new version in a new post. Do that now. Post the code as it is now and add comments explaining what each line of loop() does or should do

This is the code I used.

#include <TinyGPS++.h>

void setup() {

Serial.begin(9600); //Serial monitor baud rate set at 9600
Serial1.begin(9600); //GPS baud rate set at 9600


void loop() {
if (Serial.available()) { //Checks whether data is available in Serial
Serial1.write(; //Then Reads in Serial and writes in Serial1

if (Serial1.available()) { //Checks whether data is available in Serial1
Serial.write(; //Then reads in Serial1 and writes in Serial


Is the above correct?

It looks OK but I don't understand why the first if is there

If I can find my GPS module I will try your sketch

That would be helpful.

Do update here how it goes.

I found the GPS module but my Nano IOT 33 seems to be dead, or at least not recognised by my PC, so it could be a while before I can test it, if ever

There is no need to check if there is characters coming in on the Serial port, there should not be any.

Try this, should work an most all Serial & Serialx setups;

void loop()
  while (Serial1.available())

void setup()
  Serial1.begin(9600);            //GPS on this port
  Serial.println("GPS_Echo_Hardware_Serial Starting");

I tried this sketch but there's no characters coming on the Serial port. Is it correct?

And may I know why the baud rate for Serial and Serial1 is different in your sketch?