Package: pi4
pi - Raspberry (Raspberry Pi 4B) related codesOS : raspbian 64-bit.Development on pi is quite comfortable. It is essentially linux-based app development, with some GPIO/I2C/SENSOR programmings.VehicleThe GUI uses ttkbootstrap, tkinter, pyqt, opencv etc.vehicle acc (adaptive cruise control)* The vehicle has a supersonic sensor, short-distance collision detection sensors, fall detection sensor and a pan-tilt-mounted infra-red camera.  
* The vehicle currently USED PINS:

3V3  (1) (2)  5V    
- GPIO2 PCA9685 SDA (3) (4)  5V    
- GPIO3 PCA9685 SCL (5) (6)  GND   
- GPIO4 IR Control (7) (8)  - GPIO14 UART TX
GND  (9) (10) - GPIO15 UART RX
* GPIO17 (11) (12) - GPIO18
- GPIO27 (13) (14) GND   
- GPIO22 (15) (16) - GPIO23
3V3 (17) (18) - GPIO24
* GPIO10 SPI (19) (20) GND   
* GPIO9 SPI (21) (22) - GPIO25
* GPIO11 SPI (23) (24) * GPIO8 SPI0 CE0
GND (25) (26) * GPIO7 SPI0 CE1
- GPIO0 (27) EEPROM SDA (28) - GPIO1 EEPROM SCL | CAT24C32: EEPROM 串行 32-Kb I2C
- GPIO5 (29) (30) GND   
- GPIO6 (31) (32) - GPIO12
- GPIO13 (33) (34) GND   
- GPIO19 (35) (36) - GPIO16
- GPIO26 (37) (38) - GPIO20
GND (39) (40) - GPIO21demo videoMedical Device* This is a 4b-based medical device prototype. The GUI provides camera liveview, image capturing, browsing, uploading.IOTRaspberry pi-based iot experiments code.Some sensors can be replaced by other types. e.g., touch sensor -> tilt / vibration / reed / push button.With the i2c chip (8591), you can use analog output sensors, such as joystick, raindrop, smog, flame, thermo-resistor, photo-resistor, noise, etc.edge-computing and AIThis package also include an 'ai' module. The module is mainly targeted at edge devices (largely depends on tf-lite, efficientnet, mobilenet and other lightweight models or frameworks). However, it can also be used for general-purposed ai and image processing applications.Communication with Arduinosrc/arduino/draw/draw.ino is an arduino drawing board application.src/pi/draw/host.py is its upper control GUI. The GUI allows to open a gcode file and send gcode commands to arduino by serial, I2C or bluetooth.src/arduino/4wd/4wd.ino is another arduino project (supports IR remote control):src/pi/4wd/control.py is its upper control GUI (by bluetooth):Setup the raspberry pi osUse the official Raspi Imager tool to setup Raspbian 64 bit OS to SD cardIf you haven't configured wifi in Raspi Imager, create the wpa_supplicant.conf file in boot folder:country=CN
update_config=1
ctrl_interface=/var/run/wpa_supplicantnetwork={
scan_ssid=1
ssid="2701" # wifi name
psk="xxx" # password
priority=1
}create an empty file named ssh in boot folder.Boot deviceUse the wireless router's admin panel to check the pi's ip:SSID1 raspberrypi 192.168.5.xxx e4:5f:01:9c:1b:c4sshpi@192.168.5.xxxThe authenticity of host '192.168.5.120 (192.168.5.120)' can't be established.
ECDSA key fingerprint is SHA256:Qj+rFMb4dTkKNh6SeADd30S9KK8N1mSyTvKFqSEq8M4.
Are you sure you want to continue connecting (yes/no/[fingerprint])? y
Please type 'yes', 'no' or the fingerprint: yes
Warning: Permanently added '192.168.5.120' (ECDSA) to the list of known hosts.
pi@192.168.5.120's password:
Linux raspberrypi 5.15.32-v7l+ #1538 SMP Thu Mar 31 19:39:41 BST 2022 armv7lpinoutpi@raspberrypi:~ $ pinout
,--------------------------------.
| oooooooooooooooooooo J8   +======
| 1ooooooooooooooooooo  PoE |   Net
|  Wi                    1o +======
|  Fi  Pi Model 4B  V1.5 oo      |
|        ,----. +---+         +====
| |D|    |SoC | |RAM|         |USB3
| |S|    |    | |   |         +====
| |I|----' +---+            | |                   |C|       +==== |                   |S|       |USB2 | pwr   |hd|   |hd| |I||A|    +====-| |---|m0|---|m1|----|V|-------'pi@raspberrypi:~ $ raspi-configEnable VNC in the interface settings
Change VNC resolution to 1280x720 in the display settings. (to enhance response speed)
Expand SD storage. then df-h to checkConnect SPI screen and rebootIf wifi is disabled, the SPI screen will show; otherwise use ssh, VNC or Teamviewer.sudo nano /boot/config.txtUncomment the dtoverlay=vc4-kms-v3dsudo rebootConnect SPI cameralibcamera-hello
[OBSOLETE] > sudo raspistill -o myimg.jpgPlugin the camera and testsudo apt-get update && sudo apt-get upgrade
sudo apt-get install fcitx fcitx-googlepinyin # optional: install IMEsudo apt-get install luvcview
luvcview # a live view of /dev/video0sudo apt install fswebcam
fswebcam -r 1600x1200 --rotate 180 --no-banner image1.jpg # capture imageupdate eeprom: this helps to reduce CPU temperaturesudo rpi-eeprom-update -asudo rebootInstall numpy and opencv[Optional] When the network speed is unbearable )NOTE: The file content for 32 and 64 bit OS differ):sudo nano /etc/apt/sources.listsudo nano /etc/apt/sources.list.d/raspi.listReplace deb and deb-src with domestic mirrors. e.g.,http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/bullseye ...sudo pip install --upgrade cmake numpy opencv-python opencv-contrib-python -ihttps://pypi.tuna.tsinghua.edu.cn/simpleWringPi64bit: wgethttps://github.com/WiringPi/WiringPi/releases/download/2.61-1/wiringpi-2.61-1-arm64.debor32bit: wgethttps://github.com/WiringPi/WiringPi/releases/download/2.61-1/wiringpi-2.61-1-armhf.debsudo dpkg -i wiringpi-latest.deb
gpio -v
gpio readallSetup GPIOZero and/or RPi.GPIOsudo apt install python3-gpiozerogpiozero can be simpler than RPi.GPIO and more friendly to beginners.The gpiozero module always uses Broadcom GPIO numbering to identify a GPIO.The RPi.GPIO module can use physical pin numbering (BOARD) or Broadcom GPIO numbering (BCM). The physical pin 21 is connected to GPIO 9.I2C device setupgpio i2cdetect0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    00:                         08 -- -- -- -- -- -- -- 
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- -- 
    30: -- -- -- -- -- -- -- -- -- -- -- -- 3C -- -- -- 
    40: 40 41 -- -- -- -- -- -- 48 -- -- -- -- -- -- -- 
    50: -- -- -- -- -- -- -- 57 -- -- -- -- -- -- -- -- 
    60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 
    70: 70 -- -- -- -- -- -- --0x08 - Arduino drawing board  
0x27 - LCD1602 PCF8574  
0x3C - TTP 229 16-key touch pad | 0.96" inch OLED screen   
0x40 - servo: PCA9685 16-channel PWM driver  
0x41 - 6WD control board    
0x48 - ADC: PCF8591  
0x57 - SpO2 sensor  
0x68 - XYZ sensor  
0x70 - 

I2C is not hot-pluggable. You must restart to add a new I2C device.  

To check a full list of I2C addresses, go to https://i2cdevices.org/addressesBluetooth SPPConnect HC06's TX and RX to Arduino's RX and TX.hciconfig
hci0:	Type: Primary  Bus: UART
BD Address: E4:5F:01:9C:1B:C5  ACL MTU: 1021:8  SCO MTU: 64:1
UP RUNNING PSCAN
RX bytes:4889 acl:0 sco:0 events:158 errors:0
TX bytes:3783 acl:0 sco:0 commands:127 errors:0hcitool scan
Scanning ...
98:DA:40:01:78:68	HC-06sudo killall rfcommsudo rfcomm connect /dev/rfcomm1 98:DA:40:01:78:68 &Connected /dev/rfcomm1 to 98:DA:40:01:78:68 on channel 1ls /dev/rfcomm*sudo apt-get install picocomsudo picocom -c /dev/rfcomm0Then, use it as a regular serial port '/dev/rfcomm1'.Bluetooth GUIsudo apt install bluetooth pi-bluetooth bluez bluemanThen you can connect to bluetooth speakers, etc.[Optional] Setup ir (infra-red). This is the most painful part. Take patience.sudo apt install lirc liblircclient-dev ir-keytable # lirc: Linux Infrared Remote Control

sudo nano /boot/config.txt
dtoverlay=gpio-ir,gpio_pin=17 #4
dtoverlay=gpio-ir-tx,gpio_pin=18 #5 

sudo reboot

pi@raspberrypi:~ $ sudo ir-keytable -c -p all -t
Old keytable cleared
Protocols changed to unknown other lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp cec imon rc-mm 
Loaded BPF protocol xbox-dvd
Testing events. Please, press CTRL-C to abort.

[press some key on the remote controller]

237.470055: lirc protocol(nec): scancode = 0x45
237.470076: event type EV_MSC(0x04): scancode = 0x45
237.470076: event type EV_SYN(0x00).
237.530059: lirc protocol(nec): scancode = 0x45 repeat
237.530079: event type EV_MSC(0x04): scancode = 0x45
237.530079: event type EV_SYN(0x00).
238.790052: lirc protocol(nec): scancode = 0x46
238.790071: event type EV_MSC(0x04): scancode = 0x46
238.790071: event type EV_SYN(0x00).


sudo nano /etc/lirc/lirc_options.conf

driver = default
device = /dev/lirc1

pi@raspberrypi:~ $ sudo systemctl stop lircd.service
Warning: Stopping lircd.service, but it can still be activated by:
lircd.socket
pi@raspberrypi:~ $ sudo mode2 -d /dev/lirc1
[Press some keys on the remote controller]
Using driver default on device /dev/lirc1
Trying device: /dev/lirc1
Using device: /dev/lirc1
Running as regular user pi
pulse 9071
space 4471
pulse 608
space 519
pulse 589
...

把lircd.conf 传到pi目录下；
sudo cp lircd.conf /etc/lirc/lircd.conf

sudo reboot


pi@raspberrypi:~ $ irw
0000000000000001 00 KEY_CHANNELDOWN ./lircd.conf
0000000000000002 00 KEY_CHANNEL ./lircd.conf
0000000000000008 00 KEY_VOLUMEDOWN ./lircd.conf
0000000000000007 00 KEY_VOLUMEUP ./lircd.confEnable 1 Wireenable "1 wire" and add "dtoverlay=w1-gpio" to /boot/config.txt

reboot

Connect the 1-wire temperature sensor

pi@raspberrypi:/sys/bus/w1/devices/28-012029342a03 $ cat w1_slave
c2 01 4b 46 7f ff 0c 10 a8 : crc=a8 YES
c2 01 4b 46 7f ff 0c 10 a8 t=28125
pi@raspberrypi:/sys/bus/w1/devices/28-012029342a03 $ cat w1_slave
c2 01 4b 46 7f ff 0c 10 a8 : crc=a8 YES
c2 01 4b 46 7f ff 0c 10 a8 t=28125apgit clone https://github.com/oblique/create_ap.git  
cd create_ap  
sudo make install  
sudo apt-get install dnsmasq  
sudo apt-get install util-linux procps hostapd iproute2 iw haveged  

sudo create_ap wlan0 eth0 热点名 密码

optional:   
sudo nano /etc/rc.local   
add create_ap ...GUI dev: ttkbootstrap, webview, qt[gtk backend for webview] > sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0 gir1.2-webkit2-4.0   
[optional if use qt backend for webview] > sudo apt install python3-pyqt5 python3-pyqt5.qtwebengine python3-pyqt5.qtwebchannel libqt5webkit5-dev   

> sudo pip install ttkbootstrap pywebview -i https://pypi.tuna.tsinghua.edu.cn/simple

> sudo apt-get install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools qtcreator qtdeclarative5-dev[Optional] Data Sciencesudo apt-get install r-base r-base-devsudo pip install sklearnif you want to do some deep learning,sudo pip install Cython==0.29.16go tohttps://github.com/Qengineering/TensorFlow-Raspberry-Pi_64-bitto download a correct whlsudo pip install tensorflow-2.9.1-cp39-cp39-linux_aarch64.whlsudo pip install kerassudo pip install torch-1.11.0a0+gitbc2c6ed-cp39-cp39-linux_aarch64.whlif you want to C/C++ programming, do the following:sudo apt-get install libopencv-dev # codeblocks    
add /usr/include/opencv4/ to 'search directories'

wget https://github.com/tensorflow/tensorflow/archive/v2.6.5.zip   
unzip  
./tensorflow/lite/tools/make/download_dependencies.sh  
./tensorflow/lite/tools/make/build_aarch64_lib.sh  

According to https://qengineering.eu/install-tensorflow-2-lite-on-raspberry-64-os.html, we need to compile newer version of flatbuffers:  
cd tensorflow/lite/tools/make/downloads  
rm -rf flatbuffers  
git clone -b v2.0.0 --depth=1 --recursive https://github.com/google/flatbuffers.git  
cd flatbuffers && mkdir build && cd build && cmake .. && make -j4  
sudo make install && sudo ldconfigCustomize splashscreennano /boot/cmdline.txtconsole=serial0,115200 console=tty1 root=PARTUUID=ae28fe49-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles console=tty3 logo.nologo loglevel=3 vt.global_cursor_default=0 plymouth.enable=0Plymouth is the application which provides the graphical "splash" screen when booting and shutting down an Ubuntu system.nano /boot/config.txtdisable_splash=1sudo apt install fbisudo nano /etc/systemd/system/splashscreen.service[Unit]
Description=Splash screen
DefaultDependencies=no
After=local-fs.target
[Service]
ExecStart=/usr/bin/fbi -d /dev/fb0 --noverbose -a /home/pi/your_image.jpg
StandardInput=tty
StandardOutput=tty
[Install]
WantedBy=sysinit.targetsudo systemctl enable splashscreenInstallpip install pi4RunIoT GUI: `sudo python -m pi.iot.vehicle`

Camera GUI: `sudo python -m pi.camera.ttk`

AI GUI: `sudo python -m pi.ai.demo`

If you run under Windows, the native GPIO and SMBus will be replaced by a simulator.

    if sys.platform == 'win32':
        sys.path.append(os.path.dirname(__file__))
        from simulator import GPIO, SMBus, PWM
    else:
        from RPi import GPIO
        from smbus import SMBusAutostartIf you need to autostart a GUI app,

> sudo nano /etc/xdg/autostart/picam.desktop
           
[Desktop Entry]
Name = PiCam
Exec=/usr/bin/python3 -m pi.camera.ttkCreate a Shrinked ImageUse Win32DiskImager to create a full-sized image.  
Download pishrink.sh from https://github.com/Drewsif/PiShrink.    

chmod +x pishrink.sh  
sudo mv pishrink.sh /usr/local/bin  

sudo pishrink.sh pi.img  # to restore, use etcher.