Hubo verwendet Hardwarekomponenten, welche auch in vielfältigen anderen Projekten zum Einsatz gelangt. Insofern ist es nicht verwunderlich, daß die Programmierung auch in anderen Sprachen als C++, z.B. Python, sehr einfach ist. Anbei seien zwei Beispiele angeführt, wie die analogen und digitalen Eingänge des Hubo eingelesen und die digitalen Ausgänge gesetzt werden können.
Sollte Ihr Betriebssystem noch nicht über die Voraussetzungen zur Programmierung unter Python verfügen, so können Sie das der Hubo C++ Library beiliegende Installationsscript ausführen, welches ihnen die notwendigen Bibliotheken und Tools für Python installiert.
Einlesen der analogen Eingänge des Hubo mittels Python
Das folgende Beispiel liest 10 mal im Abstand von 1s den analogen Kanal 0 des Hubo ein und gibt ihn auf der Konsole aus.
#!/usr/bin/python import spidev import time # Hubo MCP3208 Demo - simple reading of the MCP3208 analog input. def Open_SPI_ADC (): spiADC = spidev.SpiDev() spiADC.open(0, 0) spiADC.max_speed_hz = (50000) return spiADC def Get_AI_Channel (spiADC, channel): if ((channel > 7) or (channel < 0)): print 'Illegal channel number (0 through 7)' return 0.0 result = spiADC.xfer2([6 + (channel >> 2), channel << 6, 0]) count = ((result[1] & 0x0F) << 8) + (result[2]) # Use a reference voltage of 2.53V. voltage = (2.53 * count) / 4096 return voltage # Read 10 values from analog input 0. spiADC = Open_SPI_ADC() for i in range(0, 9): print Get_AI_Channel (spiADC, 0) time.sleep(1) spiADC.close();
Einlesen und setzen der digitalen Ein- und Ausgänge des Hubo mittels Python
Dieses Beispiel liest in einer Endlosschleife alle 8 digitalen Eingänge des Hubo ein und gibt sie unmittelbar danach auf dessen 8 Analogausgängen wieder aus.
#!/usr/bin/python import smbus import time # Hubo MCP23017 Demo - simple reading and writing of the MCP23017 digital IO. IODIRA = 0x00 IODIRB = 0x01 GPPUB = 0x0D GPIOA = 0x12 GPIOB = 0x13 global g_ioaddress g_ioaddress = 0x20 # I2C address - Hubo master modules use 0x20 def Initialize_MCP23017 (): i2cbus = smbus.SMBus(1) # Use 1 for the model B variants, use 0 for Banana Pi. i2cbus.write_byte_data (g_ioaddress, IODIRA, 0x00) # Configure port A as output i2cbus.write_byte_data (g_ioaddress, IODIRB, 0xFF) # Configure port B as input i2cbus.write_byte_data (g_ioaddress, GPPUB, 0xFF) # Activate port B's internal pull up resistors return i2cbus def Get_DI_Channels (i2cbus): return i2cbus.read_byte_data(g_ioaddress, GPIOB) def Set_DI_Channels (i2cbus, value): return i2cbus.write_byte_data(g_ioaddress, GPIOA, value) # Read values from the digital input port and output the value on the digital output port. i2cbus = Initialize_MCP23017() while True: value = Get_DI_Channels (i2cbus) Set_DI_Channels(i2cbus, value) print value time.sleep(0.1)