====== Introduction ====== {{:en:tinkeringkitbreadboarddriverleds.png?800|}} You're probably itching to make some fun embedded computer projects with **ODROID-XU4**. What you need is an add on prototyping T-breakout board, which can break out all those tasty power, GPIO, I2C, ADC pins from the 40 pin header onto a solderless breadboard. This set will make "cobbling together" prototypes with the **ODROID-XU4** super easy. This kit comes with below many items. * Assembled T-breakout PCB - 40Pin GPIO Breakout board * Breadboard - 630 Tie-points with dual power lanes * 40pin Ribbon cable - IDC Flat cable 100mm * 40pin Male-to-Male Dupont jumper Wire 170mm * 7 x Green LED 3mm * 7 x Yellow LED 3mm * 7 x Red LED 3mm * 2 x Photo Cell (CdS Light sensor) * 6 x Tact Switchs * 50 x 330 Ohm 1/6W resister * 50 x 10K Ohm 1/6W resister [[http://www.hardkernel.com/main/products/prdt_info.php?g_code=G141637532784|Where to buy]] ====== DIY light level meter project ====== ==== Linux ==== 1. Configuration tinkering kit such as below schematic.\\ Light Level Meter schematic {{:en:tinkeringkitdriverleds.png?800|}} 2. Get the wiringPi library compatible **ODROID** # git clone https://github.com/hardkernel/wiringPi 3. Build the library # cd wiringPi # ./build 4. Compile and run the example source code. //------------------------------------------------------------------------------------------------------------ // // ODROID-C GPIO(LED) / ADC Test Application. // // Defined port number is wiringPi port number. // // Compile : gcc -o -lwiringPi -lwiringPiDev -lpthread // Run : sudo ./ // //------------------------------------------------------------------------------------------------------------ #include #include #include #include #include #include #include #include #include #include //------------------------------------------------------------------------------------------------------------ // // Global handle Define // //------------------------------------------------------------------------------------------------------------ #define DATA_UPDATE_PERIOD 100 // 100ms //------------------------------------------------------------------------------------------------------------ // // ADC: // //------------------------------------------------------------------------------------------------------------ #define PORT_ADC 0 // ADC.AIN0 #define MAX_ADC_VALUE 4095 //------------------------------------------------------------------------------------------------------------ // // LED: // //------------------------------------------------------------------------------------------------------------ const int ledPorts[] = { 7, 0, 2, 3, 12, 13, 14, 21, 22, 23, }; #define MAX_LED_CNT (sizeof(ledPorts) / sizeof(ledPorts[0])) #define ADC_UNIT (MAX_ADC_VALUE / MAX_LED_CNT) //------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------ // // system init // //------------------------------------------------------------------------------------------------------------ int system_init(void) { int i; // GPIO Init(LED Port ALL Output) for(i = 0; i < MAX_LED_CNT; i++) pinMode (ledPorts[i], OUTPUT); return 0; } //------------------------------------------------------------------------------------------------------------ // // board data update // //------------------------------------------------------------------------------------------------------------ void boardDataUpdate(void) { int i, adcValue, ledPos; // adc value read if((adcValue = analogRead (PORT_ADC))) { ledPos = adcValue / ADC_UNIT; } else ledPos = 0; // LED Control for(i = 0; i < MAX_LED_CNT; i++) digitalWrite (ledPorts[i], 0); // LED All Clear for(i = 0; i < ledPos; i++) digitalWrite (ledPorts[i], 1); // LED On } //------------------------------------------------------------------------------------------------------------ // // Start Program // //------------------------------------------------------------------------------------------------------------ int main (int argc, char *argv[]) { static int timer = 0 ; wiringPiSetup (); if (system_init() < 0) { fprintf (stderr, "%s: System Init failed\n", __func__); return -1; } for(;;) { usleep(100000); if (millis () < timer) continue ; timer = millis () + DATA_UPDATE_PERIOD; // All Data update boardDataUpdate(); } return 0 ; } ====== Python example ====== * [[https://github.com/hardkernel/WiringPi2-Python|WiringPi2-Python repository for ODROID]] 0. Requrements install # sudo apt update # sudo apt install python-dev python-setuptools swig3.0 1. Get/setup WiringPi 2 for Python repository # git clone https://github.com/hardkernel/WiringPi2-Python.git # cd WiringPi2-Python # git submodule init # git submodule update 2. Build & install # ./build.sh Or # swig3.0 -python -threads wiringpi.i # sudo python setup.py build install **[[http://odroid.com/dokuwiki/doku.php?id=en:xu3_hardware_gpio#gpio_map_for_wiringpi_library_con10_2_x_15|WiringPi Pin Map]]** 3. Run the example source code #!/usr/bin/python import wiringpi2 as wpi import time leds = [7, 0, 2, 3, 12, 13, 14, 21, 22, 23] wpi.wiringPiSetup() # GPOI pin setup for x in leds: wpi.pinMode(x, 1) wpi.digitalWrite(x, 0) adc_unit = 4095 / len(leds) while True: time.sleep(0.05) adcValue = wpi.analogRead(0) ledPos = adcValue / adc_unit for x in leds: wpi.digitalWrite(x, 0) for x in xrange(ledPos): wpi.digitalWrite(leds[x], 1)