Authorized Online Retailers:

Buy from USA Buy from UK Buy from DE Buy from IT Buy from FR Buy from ES Buy from JP

In this lesson, we will show you how to send temperature information from Pico to I2C LCD screen.

I2C is a very popular protocol which can exchange data between computer(Master) and its external devices(Slave). A  typical I2C slave device must a data pin(SDA) and a clock pin(SCL) which must be connected the SDA and SCL pin of Raspberry Pi Pico. One Pico SDA and SCL pin pair (BUS) can actually connect to multiple slave devices. Each slave device has a unique address ID by which Pico can find it by program.

In this project, we will use an I2C LCD display as slave device. We will use a Pico board internal temperature sensor to get temperature and display the data to I2C LCD display.

  1. Raspberry Pi Pico board and microUSB cable
  2. A computer to run Thonny Python IDE
  3. A breadboard
  4. I2C 1602 LCD display

In above circuit graph, you can see that:
LCD VCC pin connected to Pico Vbus pin(5V)
LCD GND pin connected to Pico GND
LCD SDA pin connected to Pico SDA pin(GP0)
LCD SCL pin connected to Pico SCL pin(GP1)

lcd_api and pico_i2c_lcd library

In this lesson, we will use lcd_api and pico_i2c_lcd two Python library to access LCD. Please download the library zip file from https://osoyoo.com/driver/pico/pico_i2c_lcd.zip

Unzip above zip file, you will see two files: lcd_api.py and pico_i2c_lcd.py. Use Thonny to open each file and then save them to Pico root directory.

You can download lesson 4 python code from https://osoyoo.com/driver/pico/lesson4/pico-lesson4.py

You can use Thonny to open pico-lesson4.py and load it to Pico later.
Here is the full code with comments:

from machine import I2C,Pin,ADC #import libraries to handle Pins, I2C and ADC
from time import sleep 
from pico_i2c_lcd import I2cLcd #import library to handle I2C LCD
sensor_temp = ADC(4)            #Internal Temperature sensor is connected to ADC 4
conversion_factor = 3.3/65535
def get_temperature():          #get temperature value from ADC 4 internal sensor
    reading = sensor_temp.read_u16() * conversion_factor
    temperature = 27 - (reading - 0.706)/0.001721
    return temperature

i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000) #initialize I2C port
I2C_ADDR = i2c.scan()[0].          #get I2C address
lcd = I2cLcd(i2c, I2C_ADDR, 2, 16) #initialize I2C display as 2x16
degree = bytearray([0x1c,0x14,0x1c,0x00,0x00,0x00,0x00,0x00]) #define a customized LCD icon for º (degree sign)
lcd.custom_char(0, degree)         #degree sign 'º' will be used as chr(0) in program
while True:       
    lcd.putstr("Temperature:\n"+str(get_temperature())+" C"+chr(0)) #display temperature to LCD
    sleep(4)
    lcd.clear()

Step 1: Connect Pico board to one of USB ports in your PC
Step 2: If you haven’t installed Thonny Software or don’t know how to use Thonny IDE, please read lesson 1

Step 3: Now open the Thonny Python IDE, click Run to select MicroPython for Rapsberry Pi Pico as Interpreter :

Also please select the COM port which your Pico board is connected :

After that, click OK to save the setting.

Step 4: Unzip file pico_i2c_lcd.zip ,you can see two files: lcd_api.py and pico_i2c_lcd.py. Use Thonny to open each file

as following;

and then save them to Pico root directory.

then click OK

Step 5: Open the lesson4.py ,click the little ► button  ,save this py to computer ,then run the Python code.

Now you can see LCD shows:

Temperature:
25.01234 Cº

Learn More about parts SKU:2021005900

No. Picture Product Name Link
1 Raspberry Pi Pico Board https://osoyoo.store/products/raspberry-pi-pico-flexible-microcontroller-board-based-on-the-raspberry-pi-rp2040-dual-core-arm-cortex-m0-processor-1-pc?variant=39875307864175
2 Servo motor https://osoyoo.store/products/micro-servo-sg90-blue-for-arduino-v2-0-robot-carmodel-lacc200610?variant=31648847560815
3 Infrared Sensor Module https://osoyoo.store/products/hc-sr501-pir-motion-sensor-for-arduino?variant=31957812838511
4 RFID Module and card https://osoyoo.store/products/osoyoo-rfid-module?variant=31970646130799
5 Push Buttons and Hats https://osoyoo.store/products/push-button-and-hats-5pcs?variant=39879253131375
6 LED(6 x White, 6 x Red, 6 x Yellow, 6x Green) https://osoyoo.store/products/led-packs-for-arduino?variant=31957816442991
7 Servo motor https://osoyoo.store/products/sg90-micro-servo-for-arduino-raspberry-pi-robot?variant=31957821096047
8 Piezo Buzzer Module https://osoyoo.store/products/piezo-buzzer-module-1pcs?variant=39879251656815
9 I2C LCD Display(16×2) https://osoyoo.store/products/i2c-lcd1602-display?variant=39875437101167
10 Philips Screwdriver https://osoyoo.store/products/phillips-screwdriver?variant=31930635780207https://osoyoo.store/products/single-channel-relay-module-for-arduino-raspberry-pi?variant=31955954401391
11 Solderless Prototype Breadboard https://osoyoo.store/products/solderless-prototype-breadboard-1pcs?variant=39879255457903
12 Potentionmeter (10K adjustable resistor) https://osoyoo.store/products/potentionmeter-10k-adjustable-resistor-3pcs?variant=39879281016943
13 40Pin M to M Jumper Wires https://osoyoo.store/products/40pin-m-to-m-jumper-wires?variant=39879256539247
14 20Pin M to F Jumper wires 15cm https://osoyoo.store/products/20pin-15cm-female-to-female-cable?variant=31930663305327