Raspberry Pi drive 1.44inch LCD HAT with fbtft
The hardware:
The software:
Some users feedback that this LCD less of instruction and some of them like to use it as a monitor of Pi. So, this article Let's learn how to port fbtft for displaying with Raspberry Pi.
The software:
Some users feedback that this LCD less of instruction and some of them like to use it as a monitor of Pi. So, this article Let's learn how to port fbtft for displaying with Raspberry Pi.
Framebuffer uses an buffer to store the data for displaying, if you want to change the display you just need to change the data on buffer.
There is an open source project on github: https://github.com/notro/fbtft. Thanks to its contributors. With this project, Raspberry Pi could supports TFT LCD perfectly. Let's do it.
Framebuffer
1. Open and edit module file to enable modules
sudo nano
/etc/modules
Append two statement below to the file . The first one is to enable the SPI of Pi and the second is used to start the fbtft device.
spi-bcm2835
fbtft_device
2. Creating a new file for fbtft configuration
sudo nano
/etc/modprobe.d/fbtft.conf
Add the statements to this new file:
#
/etc/modprobe.d/fbtft.conf
options
fbtft_device name=adafruit18_green
gpios=reset:27,dc:25,cs:8,led:24
speed=40000000 bgr=1 fps=60 custom=1 height=128 width=128 rotate=180
Note: You need to edit the name to the exact type of controller of your LCD. The controller of 1.44inch LCD HAT is ST7735s which is same as adafruit18_green and the fbtft support it as well, so we use adafruit18_green here.
gpios=reset:27,dc:25,cs:8,led:24 This statement set the PIN of LCD according to the schematic.
height=128 width=128 rotate=180 Set the resolution of LCD and the orinetatin of display .
3. Restart your Pi. If you find that the screen is became black display then it is working. (Don't forget inset your LCD to Pi at first)
4. list the device and you can find that there is a device fb1. Otherwise the device failed to boot.
5. Use fbset command to get the infromation of fbtft device
sudo fbset -i
6. If you failed to execute the fbset command you can install it and try again
sudo apt-get install
fbset
As the image above, the resolution 128x128 is correct. However, others are wrong like the size is 32768 in fact but not 65536.
7. Read the memory with command:
sudo cat /dev/fb1 > fb.fb
Use the command ls -l it show that the size of fb.fb file is 32768
8. Edit it:
vi -b fb.fb
Type at the bottom to change its format to HEX: :%!xxd
9. You can see that there are all 0 on the memory, it is why the screen display black. We change the first line to FF, convert to BIN file again and save.
:%!xxd -r
:wq
|
10. Display it
sudo cat fb.fb > /dev/fb1
|
Then you can see that several white dots are display at left-bottom of screen. This is what Framebuffer work. If we change the data on buffer, the display will change as well,
Display a picture
Lets display a picture, first we need to install the PIL library of python
sudo
apt-get install python-imaging
|
The code are:
#!/usr/bin/env
python2
import os
import struct
from PIL import Image
im = Image.open('time.bmp')
im = im.rotate(270)
w, h = im.size
print( "w:", w ,"h:", h)
with open('/dev/fb1', 'wb') as f:
for j in range(0,h):
for i in range(0,w):
r,g,b =im.getpixel((i,j))
rgb=struct.pack('H',((r >> 3) << 11)|((j >> 2) << 5)|(b >> 3))
f.write(rgb);
|
The code will read one image, convert it to data and write to device /dev/fb1. Note that the display uses two bytes for one pixel which is based on RGB565.
If you run the code above, you will find that the screen displays line by line, it looks uncomfortable.
We can modify the code, first store data to fb file and then display it by command cat
#!/usr/bin/env
python2
import os
import struct
from PIL import Image
im = Image.open('time.bmp')
im = im.rotate(270)
w, h = im.size
print( "w:", w ,"h:", h)
with open('time.fb', 'wb') as f:
for j in range(0,h):
for i in range(0,w):
r,g,b =im.getpixel((i,j))
rgb=struct.pack('H',((r >> 3) << 11)|((j >> 2) << 5)|(b >> 3))
f.write(rgb);
os.system('cat time.fb > /dev/fb1')
|
Here we share these projects for you. You can click to download.
Display Desktop
To display the desktop, we need to copy the content of fb0 to fb1 to make them keep synchronous.
1. Install cmake tool
sudo apt-get install cmake git
|
2. Use the open source project we mention before
cd ~
git clone
https://github.com/tasanakorn/rpi-fbcp
cd rpi-fbcp/
mkdir build
cd build/
cmake ..
make
sudo install fbcp
/usr/local/bin/fbcp
|
3. Modify the fie:
sudo nano /etc/rc.local
|
Add fbcp& in front of exit 0
Note: the character & is necessary, Otherwise the pi may failed to boot
4. Set the config.txt file
sudo vi /boot/config.txt
|
Add statements:
hdmi_force_hotplug =
1
hdmi_cvt = 128 128 60
1 0 0 0
hdmi_group = 2
hdmi_mode = 1
hdmi_mode = 87
display_rotate = 1
|
5. Reboot your Pi and the LCD will display the desktop
Keeping lighting
1. Open the lightdm.conf file:
sudo vi /etc/lightdm/lightdm.conf
|
2. Modify lightdm.conf
find the 'xserver-command' which is under the option [SeatDefaults]. Uncomment the statement: #xserver-command=X and change it to xserver-command=X -s 0 -dpms
- -s: Disable the display protection
- dpms: close the power efficiency manage
Some users may like to use it for games, you could refer to these links, and we will not explain anymore.
-By Waveshare
the image resolution is not coming correct in my case , any suggestions
回复删除im getting fb1 but not correct image resolution
回复删除ok, thank you very much
回复删除it can help me
http://www.feasycom.com
good ieda
删除Arrows RC airplane
Atten soldering gun
Dynam RC airplane
Kerui GSM alarm
Freewing RC jet
Hobbystar Motor
Open Frame LCD Monitor, 32" Plug and Play Open Frame LCD Advertising Screen
回复删除Commercial Display Manufacturer Co Ltd offers 32 Inch" Open frame LCD monitor, Frameless Advertising Player, Lcd Video Screen, Lcd Advertising Monitor.
Visit here:- Open frame lcd monitor
Very informative and impressive post you have written, this is quite interesting and i have went through it completely, an upgraded information is shared, keep sharing such valuable information. Find the best custom lcd.
回复删除