pcDuino + Python + Arduino via UART

Узнаем IP address который получила pcDuino через DHCP и посылаем его в Arduino через UART.

#!/usr/bin/env python

import socket
import fcntl
import struct
import serial
import time, os

def get_ip_address(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
        s.fileno(),
        0x8915,  # SIOCGIFADDR
        struct.pack('256s', ifname[:15])
    )[20:24])

# Инициализация порта UART0

def uart_init():
    GPIO_MODE_PATH= os.path.normpath('/sys/devices/virtual/misc/gpio/mode/')
    GPIO_PIN_PATH=os.path.normpath('/sys/devices/virtual/misc/gpio/pin/')
    GPIO_FILENAME="gpio"

    pinMode = []
    pinData = []

    SERIAL = "3"

    for i in range(0,2):
	pinMode.append(os.path.join(GPIO_MODE_PATH, 'gpio'+str(i)))
        pinData.append(os.path.join(GPIO_PIN_PATH, 'gpio'+str(i)))

    file = open(pinMode[0], 'r+')
    file.write(SERIAL)
    file.close()
    file = open(pinMode[1], 'r+')
    file.write(SERIAL)
    file.close()

uart_init()

pcDuinoIPaddress = get_ip_address('wlan0')

arduino = serial.Serial('/dev/ttyS1',baudrate=115200,timeout=10)

arduino.write("["+pcDuinoIPaddress+"]")

arduino.close()

pcDuino

Сайт производителя pcDuino

pcduino pcduino-pinout

 

Dimensions: 125mm X 52mm

Features:

  • 1GHz ARM Cortex A8 CPU
  • GPU: OpenGL ES2.0, OpenVG 1.1 Mali 400 core
  • 1GB DRAM
  • Onboard Storage: 2GB Flash, microSD card (TF) slot for up to 32GB
  • Arduino-Style Peripheral Headers (Adapter Needed for Shield Form-Factor)
  • HDMI Video Output
  • Linux3.0 + Ubuntu12.10 Supported
  • 0.1″ Spaced GPIO Headers
  • RJ45 Ethernet Connection
  • Power Requirements: 2A @ 5VDC
  • API to access the following interfaces:
    • UART
    • ADC
    • PWM
    • GPIO
    • I2C
    • SPI
  • Program in C, C++ with GNU tool chain
  • Program in Java with standard Android SDK

Купить: SparkFun

Работаем с I2C

Для начала установим следующие пакеты:

 sudo apt-get install i2c-tools
 sudo apt-get install python-smbus
root@ubuntu:# i2cdetect -y 2
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- 1d -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --

Для доступа из С/C++ не забываем сделать:

roto# modprobe gpio
root# modprobe pwm
root# modprobe adc

Доступ к UART (GPI0 and GPI1) из Python

#!/usr/bin/python

import serial

## Select and configure the port

arduino = serial.Serial('/dev/ttyS1',baudrate=115200,timeout=10)
arduino.write("Arduino, Hello")

## Close the port so other applications can use it.

arduino.close()