Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

pcDuino Presentation at SparkFun


Published on

pcDuino presentation at SparkFun

Published in: Technology
  • Easy and hassle free way to make money online! I have just registered with this site and straight away I was making money! It doesn't get any better than this. Thank you for taking out all the hassle and making money answering surveys as easy as possible even for non-techie guys like me! ●●●
    Are you sure you want to  Yes  No
    Your message goes here

pcDuino Presentation at SparkFun

  1. 1. Overview of pcDuino
  2. 2. Agenda  pcDuino: a platform open source software meets open source hardware  Programming under Ubuntu (linux)  Arduino style programming ( C ) for pcDuino  Python programming for pcDuino  Java programming for pcDuino  Go  Cloud 9 IDE  Scratch for pcDuino  Project Showcase  Programming under Android ICS  Command line programming  QT GUI
  3. 3. pcDuino: where open software meets open hardware  pcDuino = mini PC + Arduino  pcDuino is a kind of super Arduino with the brain power of a mini PC.  Existing Arduino shield can work on pcDuino.  pcDuino can run Ubuntu. The desktop outputs from HDMI. User can remotely access its desktop via VNC (Network or OTG-USB).  pcDuino has built-in Arduino style IDE environment. It also supports programming in Python, Cloud 9 IDE, Java, Go-lang, Scratch, etc.  pcDuino can run full Android ICS, and support Arduino style hardware programming under Android.  pcDuino is a server, a WiFi router, a printer server, a IP-PBX, and more. pcDuino is a platform where open software meets open hardware.
  4. 4. pcDuino FamilypcDuino Lite pcDuino Lite WiFi pcDuino v1 pcDuino v2 pcDuino v3 CPU Allwinner A101GHz ARM Cortex A8 Allwinner A101GHz ARM Cortex A8 Allwinner A101GHz ARM Cortex A8 Allwinner A101GHz ARM Cortex A8 GPU OpenGL ES2.0OpenVG 1.1 Mali 400 core OpenGL ES2.0OpenVG 1.1 Mali 400 core OpenGL ES2.0OpenVG 1.1 Mali 400 core OpenGL ES2.0OpenVG 1.1 Mali 400 core DRAM 512MB 256MB 1GB 1GB Storage NO FlashmicroSD card (TF) slot for up to 32GB 2GB FlashmicroSD card (TF) slot for up to 32GB 2GB Flash (4GB after 2/1/2014)microSD card (TF) slot for up to 32GB 2GB Flash (4GB after 2/1/2014) microSD card (TF) slot for up to 32GB Video HDMI HDMI HDMI HDMI OS Support • Lbuntu 12.04 •Android •Lbuntu 12.04 •Doesn’t support Android •Lbuntu 12.04 •Android •Lbuntu 12.04 •Android ExtensionInterface 2.54mm headers Arduino (TM) Headers 2.54mm headers Arduino (TM) Headers NetworkInterface •10/100Mbps RJ45 •USB WiFi extension (not included) WiFi, No Ethernet •10/100Mbps RJ45 •USB WiFi extension (not included) •10/100Mbps RJ45 •WiFi Power 5V, 2000mA 5V, 2000mA 5V, 2000mA 5V, 2000mA
  5. 5. pcDuino hardware interfaces
  6. 6. Frizting Files
  7. 7. pcDuino boot modes  Default to boot from SD  If there is no bootable image in SD, it will try to boot from NAND.  For Ubuntu OS, the system and data in NAND can be copied to SD seamlessly.
  8. 8. Programming under Ubuntu (linux)
  9. 9. VNC to pcDuino through its USB- OTG
  10. 10.  Two flavors  Command line  IDE Arduino style programming ( C )
  11. 11. Arduino IDE
  12. 12. Arduino IDE
  13. 13. Arduino IDE
  14. 14. Arduino IDE
  15. 15. Arduino IDE
  16. 16. ArduBlock
  17. 17. C Command line Setup (one time) If not already done, set up git. Do this using the command: ubuntu@ubuntu:~$ sudo apt-get install git Make sure you’re in your home folder by typing ubuntu@ubuntu:~$ cd ubuntu@ubuntu:~$ pwd /home/Ubuntu Now download the distribution from github by typing ubuntu@ubuntu:~$ git clone
  18. 18. C Command line
  19. 19. C Command lineChange into the c_enviroment folder: ubuntu@ubuntu:~$ cd c_enviroment ubuntu@ubuntu:~/c_enviroment$ ls Makefile hardware libraries output sample Now run make to make the libraries and the examples with the following command: ubuntu@ubuntu:~/c_enviroment$ make Make[1]: Leaving directory `/home/ubuntu/c_enviroment/sample' The resulting binary files are found in the output/test folder ubuntu@ubuntu:~/c_enviroment$ cd output/test ubuntu@ubuntu:~/c_enviroment/output/test$ ll total 660 drwxrwxr-x 2 ubuntu ubuntu 4096 Apr 27 06:59 ./ drwxrwxr-x 3 ubuntu ubuntu 4096 Apr 27 06:49 ../ -rwxrwxr-x 1 ubuntu ubuntu 13868 Apr 27 06:58 adc_test* -rwxrwxr-x 1 ubuntu ubuntu 28284 Apr 27 06:58 adxl345_test* -rwxrwxr-x 1 ubuntu ubuntu 14209 Apr 27 06:58 interrupt_test* -rwxrwxr-x 1 ubuntu ubuntu 13726 Apr 27 06:58 io_test* -rwxrwxr-x 1 ubuntu ubuntu 13712 Apr 27 06:59 linker_button_test* -rwxrwxr-x 1 ubuntu ubuntu 13907 Apr 27 06:59 linker_buzzer_test* -rwxrwxr-x 1 ubuntu ubuntu 13689 Apr 27 06:59 linker_hall_sensor_test* -rwxrwxr-x 1 ubuntu ubuntu 13760 Apr 27 06:59 linker_joystick_test* -rwxrwxr-x 1 ubuntu ubuntu 13769 Apr 27 06:59 linker_led_bar_test* -rwxrwxr-x 1 ubuntu ubuntu 13690 Apr 27 06:59 linker_led_test* -rwxrwxr-x 1 ubuntu ubuntu 14290 Apr 27 06:59 linker_light_sensor_test* ““
  20. 20. C Command lineTo view the contents of a sample sketch, (this example we’ll look at the contents of linker_led_test.c) type: ubuntu@ubuntu:~/c_enviroment/sample$ cat linker_led_test.c /* * LED test program */ #include <core.h> int led_pin = 1; void setup() { if(argc != 2){ goto _help; } led_pin = atoi(argv[1]); if((led_pin < 0) || (led_pin > 13)){ goto _help; } pinMode(led_pin, OUTPUT); return; _help: printf("Usage %s LED_PIN_NUM(0-13)n", argv[0]); exit(-1); } void loop() { digitalWrite(led_pin, HIGH); // set the LED on delay(1000); // wait for a second digitalWrite(led_pin, LOW); // set the LED off delay(1000); // wait for a second }
  21. 21. Creating Your Own Sketch ubuntu@ubuntu:~/c_enviroment/sample$ nano button_led.c An empty nano screen should appear. Copy and paste the following code into it. (Remember to paste in nano at the cursor, just right click the mouse button). #include <core.h> // Required first line to run on pcDuino int ledPin = 8; int buttonPin = 7; // variables will change: int buttonState = 0; // variable for reading the pushbutton status void setup() { // initialize the LED pin as an output: pinMode(ledPin, OUTPUT); // initialize the pushbutton pin as an input: pinMode(buttonPin, INPUT); }
  22. 22. Creating Your Own Sketch void loop(){ // read the state of the pushbutton value: buttonState = digitalRead(buttonPin); // check if the pushbutton is pressed. // if it is, the buttonState is HIGH: if (buttonState == HIGH) { // turn LED on: digitalWrite(ledPin, HIGH); } else { // turn LED off: digitalWrite(ledPin, LOW); } }
  23. 23. Creating Your Own Sketch Modify the Makefile and Compile ubuntu@ubuntu:~/c_enviroment/sample$ nano Makefile You will see a section that lists all the OBJS something like: OBJS = io_test adc_test pwm_test spi_test adxl345_test serial_test liquidcrystal_i2c liquidcrystal_spi interrupt_test tone_test OBJS += linker_led_test linker_potentiometer_test linker_tilt_test linker_light_sensor_test linker_button_test OBJS += linker_touch_sensor_test linker_magnetic_sensor_test linker_temperature_sensor_test linker_joystick_test OBJS += linker_rtc_test linker_sound_sensor_test linker_buzzer_test linker_hall_sensor_test linker_led_bar_test linker_relay_test OBJS += pn532_readAllMemoryBlocks pn532readMifareMemory pn532readMifareTargetID pn532writeMifareMemory
  24. 24. Creating Your Own SketchWe’re going to add a line to the end of this with the name of the scketch we just created: OBJS += button_led Save the file and exit nano using <CTRL>X with a y and <enter>. We now run make by typing: ubuntu@ubuntu:~/c_enviroment/sample$ make You should see a whole bunch of text with the end being: button_led.c -o ../output/test/button_led ../libarduino.a If all went well, you can go to the output/test folder and find your executable you have created: ubuntu@ubuntu:~/c_enviroment/sample$ cd ../output/test/ ubuntu@ubuntu:~/c_enviroment/output/test$ ll total 676 drwxrwxr-x 2 ubuntu ubuntu 4096 Apr 27 07:51 ./ drwxrwxr-x 3 ubuntu ubuntu 4096 Apr 27 06:49 ../ -rwxrwxr-x 1 ubuntu ubuntu 13868 Apr 27 07:51 adc_test* -rwxrwxr-x 1 ubuntu ubuntu 28284 Apr 27 07:51 adxl345_test* -rwxrwxr-x 1 ubuntu ubuntu 13668 Apr 27 07:51 button_led* “..(not showing rest of listing here)
  25. 25. Creating Your Own SketchRun Your Sketch To run it, once you have wired up a switch and led to the right pins, type: ubuntu@ubuntu:~/c_enviroment/output/test$ ./button_led To stop the program, <Ctrl>C A Quick Re-Cap Add #include <core.h> to the top of your sketch. Create your sketch in the samples folder (if your familiar with linux, makefiles, and compiling code, you could set up your own) Add the filename to the Makefile in the samples folder in the OBJS section without the .c Run make Run the executable from the output/test folder. You can introduce command line arguments into your sketch to make it more transportable.
  26. 26. pcDuino Hardware Experiments
  27. 27. Potentiometer
  28. 28. LED Dimmer (PWM)
  29. 29. 7-seg LED
  30. 30. 8x8 LED Matrix
  31. 31. Analog Temperature Sensor
  32. 32. 4 Digits 7-segment LEDs
  33. 33. 16x02 Character LCD
  34. 34. Digital Humidity and Temperature Sensor
  35. 35. LED controlled by LDR
  36. 36. Serial Port of pcDuino
  37. 37. Extends to 4 UARTS uarts.html
  38. 38. Ultrasonic Sensor
  39. 39. Stepper
  40. 40. RF Servo
  41. 41. Relay
  42. 42. NFC Shield
  43. 43. Cottonwood:UHF ultra-distance RFID Reader
  44. 44. GPS Shield
  45. 45. Cellular Shield
  46. 46. Powerline Communication
  47. 47. Python ubuntu@ubuntu:~/python-pcduino/Samples/blink_led$ more #!/usr/bin/env python # # gpio test code for pcduino ( ) # import gpio import time led_pin = "gpio2" def delay(ms): time.sleep(1.0*ms/1000) def setup(): gpio.pinMode(led_pin, gpio.OUTPUT) def loop(): while(1): gpio.digitalWrite(led_pin, gpio.HIGH) delay(200)
  48. 48. pcDuino as Networked Device to feed data to Xively (Internet of Things)
  49. 49. Smart Garage powered by pcDuino
  50. 50. OpenCV
  51. 51. OpenCV def process(infile): image = cv.LoadImage(infile); if image: faces = detect_object(image) im = path = os.path.abspath(infile) save_path = os.path.splitext(path)[0]+"_face" try: os.mkdir(save_path) except: pass if faces: draw = ImageDraw.Draw(im) count = 0 for f in faces: count += 1 draw.rectangle(f, outline=(255, 0, 0)) a = im.crop(f) file_name = os.path.join(save_path,str(count)+".jpg") # print file_name drow_save_path = os.path.join(save_path,"out.jpg"), "JPEG", quality=80) else: print "Error: cannot detect faces on %s" % infile if __name__ == "__main__": process("./opencv_in.jpg")
  52. 52. OpenCV #!/usr/bin/env python #coding=utf-8 import os from PIL import Image, ImageDraw import cv def detect_object(image): grayscale = cv.CreateImage((image.width, image.height), 8, 1) cv.CvtColor(image, grayscale, cv.CV_BGR2GRAY) cascade = cv.Load("/usr/share/opencv/haarcascades/haarcascade_frontalface_alt_tree.xml") rect = cv.HaarDetectObjects(grayscale, cascade, cv.CreateMemStorage(), 1.1, 2, cv.CV_HAAR_DO_CANNY_PRUNING, (20,20)) result = [] for r in rect: result.append((r[0][0], r[0][1], r[0][0]+r[0][2], r[0][1]+r[0][3])) return result
  53. 53. Go Langpackage main import ( "fmt" "./gpio" "time" ) func main() { g, err := gpio.NewGPIOLine(7,gpio.OUT) if err != nil { fmt.Printf("Error setting up GPIO %v: %v", 18, err) return } blink(g, 100) g.Close() } func blink(g *gpio.GPIOLine, n uint) { fmt.Printf("blinking %v time(s)n", n) for i := uint(0); i &lt; n; i++ { g.SetState(true) time.Sleep(time.Duration(1000) * time.Millisecond) g.SetState(false) time.Sleep(time.Duration(1000) * time.Millisecond) } }
  54. 54. Cloud 9 IDE  Cloud9 IDE is an online development environment for Javascript and Node.js applications as well as HTML, CSS, PHP, Java, Ruby and 23 other languages.  You're programming for the web, on the web. Teams can collaborate on projects and run them within the browser. When you're finished, deploy it—and you're done!
  55. 55. Cloud 9 IDE
  56. 56. QT on pcDuino
  57. 57. QT on pcDuino
  58. 58. Scratch for pcDuino
  59. 59. Scratch $sudo apt-get install pcduino-scratch
  60. 60. Run SNAP on pcDuino
  61. 61. Blink LED (Scratch for pcDuino)
  62. 62. Press Button to Turn on LED (Scratch for pcDuino)
  63. 63. Touch the Finish Line (Scratch for pcDuino)
  64. 64. Play Pong with Scratch for pcDuino
  65. 65. pcDuino as banaba piano using Scratch for pcDuino
  66. 66. Showcase
  67. 67. Home Automation:IP controllable LED  Many users are asking if the hardware part can be programmed together with the Ubuntu linux?  Sure. This is the beauty of pcDuino. The Arduino compatible hardware is a native part of the OS.  pcDuino includes Ethernet port, USB Wifi dongle, so there is no need for Ethernet shield, Ethernet shield , USB host shield, MP3 shields and so on. Now, we are going to implement a TCP/IP socket server on pcDuino to listen to the data coming from client. When it receives character ’O', it will turn on the LED, and when it receives ‘F‛, it will turn on the LED. No actions if receive something else.
  68. 68. Home Automation:IP controllable LED#include ‚sys/socket.h‛ #include ‚netinet/in.h‛ #include ‚arpa/inet.h‛ #include ‚sys/types.h‛ int led_pin = 2; int listenfd = 0, connfd = 0; int n; struct sockaddr_in serv_addr; char sendBuff[1025]; time_t ticks; void loop() { n = read(connfd, sendBuff, strlen(sendBuff) ); if(n>0) { if(sendBuff[0]=='O') digitalWrite(led_pin, HIGH); // set the LED on if(sendBuff[0]=='F') digitalWrite(led_pin,LOW); // set the LED off } } void setup() { led_pin = 2; pinMode(led_pin, OUTPUT); listenfd = socket(AF_INET, SOCK_STREAM, 0); memset(serv_addr, '0', sizeof(serv_addr)); memset(sendBuff, '0', sizeof(sendBuff)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(5000); bind(listenfd, (struct sockaddr*) serv_addr, sizeof(serv_addr)); listen(listenfd, 10); connfd = accept(listenfd, (struct sockaddr*)NULL, NULL); }
  69. 69. Home Automation by Z-wave
  70. 70. SDR on pcDuino
  71. 71. pcDuino as 3D printer control console
  72. 72. Programming under Android ICS
  73. 73. Two flavors to program under Android  There are two flavors to program under Android:  Command line  QT5 GUI
  74. 74. Command line
  75. 75. QT5 GUI We can copy the apk though pcDuino OTG or SD card to pcDunio and install it there.
  76. 76. Connect with pcDuino e