Vandaag laten we je zien hoe je ons 7-segment display in gebruik nemen via de Raspberry Pi.
Ik begin met een nieuw geïnstalleerde Raspberry Pi 3 Model BDe viercijferig 7-segment displayen een handvol Jumper kabel.
Afhankelijk van het model zijn de GPIO-pinnen van de Raspberry Pi undertherin. Ik verbind de advertentie als volgt:
Na een eerste start begroet de lege Raspbian Desktop ons.
We willen de veelgebruikte bibliotheek WiringPiom de GPIO-pinnen te bedienen.
De bibliotheek stelt ons onder andere in staat om
- Pinnen om te definiëren
- Pinnen die u wilt instellen als invoer of uitvoer
- Schrijf op pinnen, of lees van hen
Om dit te doen, openen we een terminal en voeren we de volgende opdracht in:
sudo pip3 installeren wiringpi
De volgende uitvoer wordt weergegeven:
We gebruiken een licht gewijzigde versie van https://github.com/johnlr/raspberrypi-tm1637
We starten onze Python3 IDLE, gaan naar 'Bestand' -> 'Nieuw bestand' en voegen de volgende code in:
#!/Usr/Am/Env python3 Importeren subproces Van Tijd Importeren Tijd, Slaap, Lokaal Van wiringpi Importeren bedradingPiSetupGpio, pinMode, digitaalLezen, digitalWrite, Gpio bedradingPiSetupGpio() Clk = 21 Dio = 20 """ A --- V | | B -G- E | | C --- D """ Klasse TM1637: I2C_COMM1 = 0x40 I2C_COMM2 = 0xC0 I2C_COMM3 = 0x80 digit_to_segment = [ 0b0111111, # 0 0b0000110, # 1 0b1011011, # 2 0b1001111, # 3 0b1100110, # 4 0b1101101, # 5 0b1111101, # 6 0b0000111, # 7 0b1111111, # 8 0b1101111, # 9 0b1110111, # A 0b1111100, # B 0b0111001, # C 0b1011110, # D 0b1111001, # E 0b1110001 # V ] Verslaat __init__(Zelf, Clk, Dio): Zelf.Clk = Clk Zelf.Dio = Dio Zelf."Ik ben niet = 0x0f pinMode(Zelf.Clk, Gpio.Input) pinMode(Zelf.Dio, Gpio.Input) digitalWrite(Zelf.Clk, Gpio.Lage) digitalWrite(Zelf.Dio, Gpio.Lage) Verslaat bit_delay(Zelf): Slaap(0.001) Terug Verslaat set_segments(Zelf, Segment, Item=0): # Schrijven COMM1 Zelf.Start() Zelf.write_byte(Zelf.I2C_COMM1) Zelf.Stoppen() # Schrijven COMM2 + Eerste Cijfer Adres Zelf.Start() Zelf.write_byte(Zelf.I2C_COMM2 + Item) Voor Seg Inch Segment: Zelf.write_byte(Seg) Zelf.Stoppen() # Schrijven COMM3 COMM3 + "Ik ben niet Zelf.Start() Zelf.write_byte(Zelf.I2C_COMM3 + Zelf."Ik ben niet) Zelf.Stoppen() Verslaat Start(Zelf): pinMode(Zelf.Dio, Gpio.Output) Zelf.bit_delay() Verslaat Stoppen(Zelf): pinMode(Zelf.Dio, Gpio.Output) Zelf.bit_delay() pinMode(Zelf.Clk, Gpio.Input) Zelf.bit_delay() pinMode(Zelf.Dio, Gpio.Input) Zelf.bit_delay() Verslaat write_byte(Zelf, B): # 8 Gegevens Bits Voor I. Inch Bereik(8): # Clk Lage pinMode(Zelf.Clk, Gpio.Output) Zelf.bit_delay() pinMode(Zelf.Dio, Gpio.Input Als B & 1 Anders Gpio.Output) Zelf.bit_delay() pinMode(Zelf.Clk, Gpio.Input) Zelf.bit_delay() B >>= 1 pinMode(Zelf.Clk, Gpio.Output) Zelf.bit_delay() pinMode(Zelf.Clk, Gpio.Input) Zelf.bit_delay() pinMode(Zelf.Clk, Gpio.Output) Zelf.bit_delay() Terug Verslaat show_ip_address(Tm): Ipaddr = subproces.check_output("hostname -I", Shell=Waar, Timeout=1).Strip().Split(B".") Voor Octet Inch Ipaddr: Tm.set_segments([0, 0, 0, 0]) Slaap(0.1) Tm.set_segments([Tm.digit_to_segment[Int(X) & 0xf] Voor X Inch Octet]) Slaap(0.9) Verslaat show_clock(Tm): T = Lokaal() Slaap(1 - Tijd() % 1) d0 = Tm.digit_to_segment[T.tm_hour 10] als t.tm_hour / 10 anders 0 d1 = Tm.digit_to_segment[T.tm_hour % 10] d2 = Tm.digit_to_segment[T.tm_min // 10] d3 = Tm.digit_to_segment[T.tm_min % 10] Tm.set_segments([d0, 0x80 + d1, d2, d3]) Slaap(.5) Tm.set_segments([d0, d1, d2, d3]) Als __name__ == "__main__": Tm = TM1637(Clk, Dio) show_ip_address(Tm) Terwijl Waar: show_clock(Tm)
Laten we nu naar "Run" gaan -> "Run-module", geef een naam op om onze broncode op te slaan en wacht even.
Het 7-segment display geeft nu eerst het lokale IP-adres weer en vervolgens de huidige tijd:
Vanaf nu u eenvoudig informatie naar ons 7-segment display met de Raspberry Pi brengen.
1 Reactie
Erich Zwiefelhofer
Danke für das Beispielprogramm. Funktioniert mit der Darstellung der Systemzeit bestens.
Für die Darstellung der Temperatur möchte ich aber anstelle des Doppelpunktes in der Mitte nur den Kommapunkt verwenden. Wie wird der dargestellt? Kann mir da jemand helfen?