[PYTHON] Pigpio auf Himbeer-Pi

Einführung

Offizielle Seite

Installation

python


$ sudo apt install pigpio python-pigpio python3-pigpio

starte pigpiod

python


$ sudo pigpiod

automatischer Start von Pigpio

python


$ sudo systemctl enable pigpiod.service
$ sudo shutdown -r now

#Bestätigung nach dem Neustart
$ sudo systemctl status pigpiod.service

Zuallererst L Chika

led_pigpio.py


from time import sleep
import pigpio

pig = pigpio.pi()
pig.set_mode(21, pigpio.OUTPUT)

try:
    while True:
        sleep(1)
        pig.write(21, 1)
        sleep(1)
        pig.write(21, 0)
except KeyboardInterrupt:
    pig.stop()

Ereignisverarbeitung

sw_pd_event.py


from time import sleep
import pigpio

pig = pigpio.pi()
pig.set_mode(4, pigpio.INPUT)
pig.set_pull_up_down(4, pigpio.PUD_DOWN)

def cbf(gpio, level, tick):
    print(gpio, level, tick)

cb = pig.callback(4, pigpio.RISING_EDGE, cbf)

try:
    while True:
        sleep(0.01)
except KeyboardInterrupt:
    pig.stop()

LCD Bildschirm

lcd_pigpio.y


from time import sleep

import pigpio
from RPLCD.pigpio import CharLCD

pi = pigpio.pi()

lcd = CharLCD(pi, cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23], pin_contrast=9)
lcd.write_string('Hello RasPi')
sleep(3)
lcd.clear()
lcd.write_string('Test LCD pigpio')
sleep(3)
lcd.close(clear=True)
pi.stop()

i2c: 9-Achsen-Sensormodul (BMX055)

i2c_pigpio.py


from time import sleep

import pigpio
from BMX055 import bmx055

bmx = bmx055()
bmx.setup()

try:
    while True:
        ax, ay, az = bmx.read_accel()
#        print("accel: ax={0}, ay={1}, az={2}".format(ax, ay, az))

        gx, gy, gz = bmx.read_gyro()
#        print("gyro: gx={0}, gy={1}, gz={2}".format(gx, gy, gz))

        cx, cy, cz = bmx.read_compass()
#        print("comp: cx={0}, cy={1}, cz={2}".format(cx, cy, cz))

        msg = "|       |  x  |  y  |  z  |\n"
        msg += "| accel | "+str(ax)+" | "+str(ay)+" | "+str(az)+" |\n"
        msg += "| gyro  | "+str(gx)+" | "+str(gy)+" | "+str(gz)+" |\n"
        msg += "| comp  | "+str(cx)+" | "+str(cy)+" | "+str(cz)+" |\n"
        print(msg)
        sleep(0.5)
except KeyboardInterrupt:
    bmx.stop()

BMX055.py


from time import sleep

import pigpio

class bmx055:
    def __init__(self):
        self.pi = pigpio.pi() 
        self.i2c_bus = 1 
        self.accel_addr = 0x19 
        self.accel = None 
        self.comp_addr = 0x13
        self.comp = None 
        self.gyro_addr = 0x69
        self.gyro = None 
        
    def open(self, i2c_addr):    
        return self.pi.i2c_open(self.i2c_bus, i2c_addr)

    def close(self, handle):
        self.pi.i2c_close(handle)

    def stop(self):
        self.close(self.accel)
        self.close(self.comp)
        self.close(self.gyro)
        self.pi.stop()

    def setup(self):
        self.accel = self.open(self.accel_addr) 
        self.pi.i2c_write_byte_data(self.accel, 0x0f, 0x03)
        sleep(0.1)
        self.pi.i2c_write_byte_data(self.accel, 0x10, 0x08)
        sleep(0.1)
        self.pi.i2c_write_byte_data(self.accel, 0x11, 0x00)
        sleep(0.1)
        
        self.gyro = self.open(self.gyro_addr) 
        self.pi.i2c_write_byte_data(self.gyro, 0x0f, 0x04)
        sleep(0.1)
        self.pi.i2c_write_byte_data(self.gyro, 0x10, 0x07)
        sleep(0.1)
        self.pi.i2c_write_byte_data(self.gyro, 0x11, 0x00)
        sleep(0.1)

        self.comp = self.open(self.comp_addr) 
        self.pi.i2c_write_byte_data(self.comp, 0x4b, 0x83)
        sleep(0.1)
        self.pi.i2c_write_byte_data(self.comp, 0x4b, 0x01)
        sleep(0.1)
        self.pi.i2c_write_byte_data(self.comp, 0x4c, 0x00)
        self.pi.i2c_write_byte_data(self.comp, 0x4e, 0x84)
        self.pi.i2c_write_byte_data(self.comp, 0x51, 0x04)
        self.pi.i2c_write_byte_data(self.comp, 0x52, 0x16)

        sleep(0.3)

    def read_accel(self):
        x_l = self.pi.i2c_read_byte_data(self.accel, 0x02)
        x_m = self.pi.i2c_read_byte_data(self.accel, 0x03)
        y_l = self.pi.i2c_read_byte_data(self.accel, 0x04)
        y_m = self.pi.i2c_read_byte_data(self.accel, 0x05)
        z_l = self.pi.i2c_read_byte_data(self.accel, 0x06)
        z_m = self.pi.i2c_read_byte_data(self.accel, 0x07)

        x = ((x_m*256) + (x_l&0xf0))/16
        if (x > 2047):
            x -= 4096
        y = ((y_m*256) + (y_l&0xf0))/16
        if (y > 2047):
            y -= 4096
        z = ((x_m*256) + (z_l&0xf0))/16
        if (z > 2047):
            z -= 4096

        return (x, y, z)


    def read_compass(self):
        x_l = self.pi.i2c_read_byte_data(self.comp, 0x42)
        x_m = self.pi.i2c_read_byte_data(self.comp, 0x43)
        y_l = self.pi.i2c_read_byte_data(self.comp, 0x44)
        y_m = self.pi.i2c_read_byte_data(self.comp, 0x45)
        z_l = self.pi.i2c_read_byte_data(self.comp, 0x46)
        z_m = self.pi.i2c_read_byte_data(self.comp, 0x47)
        t_l = self.pi.i2c_read_byte_data(self.comp, 0x48)
        t_m = self.pi.i2c_read_byte_data(self.comp, 0x49)

        x = (x_m << 8) + (x_l >> 3)
        if (x > 4095):
            x -= 8192
        y = (y_m << 8) + (y_l >> 3)
        if (y > 4095):
            y -= 8192
        z = (x_m << 8) + (z_l >> 3)
        if (z > 16383):
            z -= 32768

        return (x, y, z)

    def read_gyro(self):
        x_l = self.pi.i2c_read_byte_data(self.gyro, 0x02)
        x_m = self.pi.i2c_read_byte_data(self.gyro, 0x03)
        y_l = self.pi.i2c_read_byte_data(self.gyro, 0x04)
        y_m = self.pi.i2c_read_byte_data(self.gyro, 0x05)
        z_l = self.pi.i2c_read_byte_data(self.gyro, 0x06)
        z_m = self.pi.i2c_read_byte_data(self.gyro, 0x07)

        x = (x_m*256) + x_l
        if (x > 32767):
            x -= 65536
        y = (y_m*256) + y_l
        if (y > 32767):
            y -= 65536
        z = (x_m*256) + z_l
        if (z > 32767):
            z -= 65536

        return (x, y, z)

Steuern Sie den Servomotor (SG92) mit PWM

Spezifikationstabelle für Servomotoren (SG92)

Artikel Wert Bemerkungen
Beweglicher Winkel 180 Grad
Geschwindigkeit 0.1s /60 Grad
Stromspannung 4.8 ~ 5.0V
Pulsperiode 10,000 - 20,000μs
Impulsbreite 500 - 2,400μs ※Datenblatt:1,000 - 2,000μs

SG90.py


import pigpio

class SG90:
    """SG90_Spec:
    #Beweglicher Winkel:180 Grad
    #Geschwindigkeit: 0.1s /60 Grad
    #Stromspannung: 4.8 ~ 5V
    #Pulsperiode: 10,000 - 20,000μs
    #Impulsbreite: 500 - 2,400μs * Datenblatt:1,000 - 2,000μs
    """
    def __init__(self, pin=None):
        self.range_of_motion = 180
        self.min_pulse_width = 500
        self.max_pulse_width = 2400
        self.pig = pigpio.pi()
        self.pin = pin
    
    def move(self, rad):
        if self.pin == None:
            pass
        else:
            spw = (rad/self.range_of_motion) * (self.max_pulse_width-self.min_pulse_width) + self.min_pulse_width
            self.pig.set_servo_pulsewidth(self.pin, spw)

    def stop(self):
        self.pig.set_servo_pulsewidth(self.pin, 0)

abschließend

Recommended Posts

Pigpio auf Himbeer-Pi
Cython auf Raspberry Pi
Pyenv auf Raspberry Pi eingeführt
Verwenden Sie NeoPixel mit Himbeerkuchen
Installieren Sie OpenCV4 auf Raspberry Pi 3
Installieren Sie TensorFlow 1.15.0 auf Raspberry Pi
MQTT auf Raspberry Pi und Mac
Himbeer Pi 4 Centos7 auf Docker installieren
Versuchen Sie es mit ArUco mit Raspberry Pi
OpenCV-Installationsverfahren auf Raspberry Pi
Ein- / Ausschalten von Raspberry Pi mit Arduino
Erkennen Sie den Schalterstatus mit Raspberry Pi 3
Installieren Sie OpenMedia Vault 5 auf Raspberry Pi 4
L Chika mit Himbeer-Pi C #
Erstellen Sie wxPython unter Ubuntu 20.04 auf Himbeer-Pi 4
Raspberry Pi "Honwaka Benachrichtigungslampe" Teil 2
Erkennen Sie "Helligkeit" mit Python auf Raspberry Pi 3!
USB-Boot auf Raspberry Pi 4 Model B.
Raspberry Pi "Honwaka Benachrichtigungslampe" Teil 1
Aktivieren Sie die serielle UART + -Kommunikation mit Raspberry Pi
Adafruit Python BluefruitLE arbeitet mit Raspeye.
Beschleunigen Sie Deep Learning mit der Rasperry Pi 4-CPU
Stellen Sie den Swap Space unter Ubuntu auf Raspberry Pi ein
Normal programmieren mit Node-RED-Programmierung mit Raspberry Pi 3
Verwenden Sie den Grove-Sensor mit Raspberry Pi
Installieren Sie das 64-Bit-Betriebssystem (Bate) auf Raspberry Pi
Installieren Sie Docker-Compose unter 64-Bit-Raspberry-Pi-Betriebssystem
Lassen Sie einen Servomotor mit Python auf Raspberry Pi 3 laufen
Raspberry Pi "Honwaka Benachrichtigungslampe" Teil 3
Arbeiten mit Sensoren in Mathematica auf Raspberry Pi
Erstellen Sie eine OpenCV-Python-Umgebung auf Raspberry Pi B +
Ermitteln Sie die Temperatur mit Python auf Raspberry Pi 3!
Matrixmultiplikation auf Raspberry Pi GPU (Teil 2)
So installieren Sie NumPy auf Raspeye
Arbeiten mit GPS in Python für Raspberry Pi 3
Was ist Raspberry Pi?
Warum DetectMultiScale () auf Raspberry Pi B + langsam ist
GPGPU mit Raspberry Pi
Erkennen Sie Schiebeschalter mit Python auf Raspberry Pi 3!
Erstellen Sie eine Django-Umgebung auf Raspai (MySQL)
Versuchen Sie, QR-Code mit Raspberry Pi zu verwenden
Erkennen Sie Magnetschalter mit Python auf Raspberry Pi 3!
Raspberry Pi Videokamera
Genießen Sie die elektronische Arbeit mit GPIO von Raspberry Pi
Raspberry Pi Schlechtes Wissen
Lass uns Raspberry Pi machen?
Schalten Sie Ihren PC mit Himbeer-Pi ein / aus
Grove - Temperatur- und Feuchtigkeitssensor (DHT11) mit Raspberry Pi
Stellen Sie DHT11 mit Raspeye + Python zur Verfügung (Hinweis)
Cross-Compilierung für Raspberry Pi Zero unter Ubuntu gestartet
Lassen Sie den Summer mit Python auf Raspberry Pi 3 erklingen!
Zeigen Sie die CPU-Temperatur alle 5 Sekunden auf dem Raspberry Pi 4 an
DigitalSignage mit Raspberry Pi
Einführung von Ceph mit Kubernetes auf Raspberry Pi 4B (ARM64)
Raspberry Pi 4 Setup-Hinweise
Stellen Sie mit Python auf Raspberry Pi eine Verbindung zu MySQL her