I'm a newcomer to the Arduino Nano 33 IOT, and I've recently ran into an issue trying to connect it to an LCD with an I2C backpack.
As I understand it, the Nano 33 IOT is only capable of a 3.3V output (unless the VUSB pin is soldered, which is not an option I'd like to pursue). I assumed this output would be sufficient to power a LCD, however after a brief flash it is inactive, with no active LED showing up on the I2C backpack.
Here the black wires connect to GND; the red wire connects the 3.3V output on the Nano 33 IOT to the LV pin on the voltage shifter, and the HV pin to the VCC pin on the LCD I2C; the yellow wire connects SCL on the Nano to TX1 on the voltage shifter, and Tx0 to SCL on the LCD I2C; and finally the blue wire connects SDA on the Nano to RX0 on the voltage shifter, and RX1 to the SDA on the LCD I2C.
However, I am still experiencing the same inactive LCD, with no powered LED. When I run the I2C scanner code linked here (Using LCD Displays with Arduino | DroneBot Workshop) and upload it to the Nano with the LCD connected, I receive only two I2C addresses (0x60 and 0x6A), which is the equivalent output to the addresses I get when I upload it to the Nano without the LCD connected, meaning the scanner doesn't detect the LCD.
I'm now really at a loss as to how I can proceed with using an LCD via I2C with the Nano 33 IOT. Any help or direction would be greatly appreciated.
Can you buy a 3.3V LCD display ? and keep this one for a project with a Arduino Uno.
This is a normal level shifter: https://www.sparkfun.com/products/12009. It has four mosfets for two I2C buses. Since you have only two mosfets, it can do just one I2C bus, but they say it has 4 channels
I understand now, so the voltage level shifter can't work without applying the 5V voltage to that side.
I hadn't thought to look into purchasing a 3.3V LCD display, that's a brilliant idea! Had a quick search online, and it seems that there are 3.3V OLED displays with communicate via I2C, they should in theory work? I found this for instance: https://www.waveshare.com/0.91inch-oled-module.htm
Yes, that will work. All OLED displays are internally running at 3.3V.
Most are 128 * 64: https://www.adafruit.com/product/326.
If you have a sensitive analog circuit, then keep the OLED away from your project. They have an internal charge pump that makes electronic noise. Someone on this forum had to replay the OLED with a LCD display.
Thanks again for the in-depth answer. My project will only use the IMU sensor onboard the Nano 33 IOT, and do some signal processing with that data. The only peripheral device would be the display, so I believe it should be ok if I go with the OLED?
complete beginner here.
I don't understand the issue with the Nano33 IOT only being able to provide 3.3V. Isn't there a 5V pin that can be used? Or am I completely wrong?
The issues that I'm running into is that I can't find the correct address (I2C) to send data to.
I've tried multiple code snippets to scan the I2C ports but so far no luck.
/*I2C_scanner
This sketch tests standard 7-bit addresses.
Devices with higher bit address might not be seen properly.*/
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
while (!Serial);
Serial.println("\nI2C Scanner");
}
void loop() {
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for (address = 1; address < 127; address++ ) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C device found at address 0x");
if (address < 16)
Serial.print("0");
Serial.print(address, HEX);
Serial.println(" !");
nDevices++;
}
else if (error == 4) {
Serial.print("Unknown error at address 0x");
if (address < 16)
Serial.print("0");
Serial.println(address, HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000);
}
it hangs on error = Wire.endTransmission(); (doesn't execute code past this point)