Американский инженер Ричард Уардлоу (Richard Wardlow) разработал интересный микроконтроллер pyMCU, который он позиционирует как «простой интерфейс на Python между компьютером и физическим миром».
В отличие от существующих Python-микроконтроллеров, эта плата предназначена не столько для автономной работы, сколько как постоянно подключенные к компьютеру «органы чувств» для Python-программы. Контроллер оснащён цифровыми и аналоговыми коннекторами, так что к нему можно подключить разнообразные устройства и сенсоры. Проще всего показать возможности контроллера на примерах.
<a rel="nofollow" name="habracut">
Вывод на ЖК-дисплей различных данных из интернета
Можно использовать любой дисплей, к которому подключаются провода. В данном случае отображается текущие погодные условия и температура через
Python-Weather-API и модуль pywapi.
Код
import pymcu import time import pywapi mb = pymcu.mcuModule() # Initialize mcu find first available module mb.lcd() # Initialize the LCD time.sleep(1) # Wait for LCD to Initialize google_result = pywapi.get_weather_from_google('10001') # Use Google as weather source with zip code 10001 mb.lcd(1,google_result['current_conditions']['condition']) # Display current conditions on first line of LCD time.sleep(0.1) # Small delay between next LCD command mb.lcd(2,'Temp ' + google_result['current_conditions']['temp_f'] + ' F') # Display Temperature on second line of LCD
Построение графика в реальном времени по данным освещённости от фотосенсора
Код
import os,sys, subprocess, time, shutil, glob import pymcu import numpy as np import matplotlib matplotlib.use('GTKAgg') # do this before importing pylab import matplotlib.pyplot as plt mb = pymcu.mcuModule() fig = plt.figure() ax = fig.add_subplot(111) ax.set_ylim(-1.1, 1.1) ax.set_xlim(0, 5) ax.grid() def animate(): tstart = time.time() # for profiling data = [0]*100 background = fig.canvas.copy_from_bbox(ax.bbox) for i in np.arange(1,1000): ax.clear() ax.grid() dt = float(mb.analogRead(4)) / 1024.0 data.append(dt) if len(data) > 100: data.pop(0) ax.plot(data) fig.canvas.draw() # redraw the canvas raise SystemExit import gobject print 'adding idle' gobject.idle_add(animate) print 'showing' plt.show()
Управление объективом фотоаппарата
Код
import pymcu import time fstops = {0:'0',0x8:'1',0xB:'1.1',0xC:'1.2',0xD:'1.2',0x10:'1.4',0x13:'1.6', 0x14:'1.8',0x15:'1.8',0x18:'2',0x1B:'2.2',0x1C:'2.5',0x1D:'2.5',0x20:'2.8', 23:'3.2',0x24:'3.2',0x25:'3.5',0x28:'4',0x2B:'4.5',0x2C:'4.5',0x2D:'5', 0x30:'5.6',0x33:'6.3',0x34:'6.7',0x35:'7.1',0x38:'8',0x3B:'9',0x3C:'9.5', 0x3D:'10',0x40:'11',0x43:'13',0x44:'13',0x45:'14',0x48:'16',0x4B:'18', 0x4C:'19',0x4D:'20',0x4E:'20',0x4F:'20',0x50:'22',0x53:'25',0x54:'27', 0x55:'29',0x58:'32',0x5A:'32',0x5B:'36',0x5C:'38',0x5D:'40',0x60:'45', 0x63:'51',0x64:'54',0x65:'57',0x68:'64',0x6B:'72',0x6C:'76',0x6D:'80',0x70:'91'} mb = pymcu.mcuModule() mb.lcd() print "Enable SPI" mb.spiEnable(1,100,0,0) # Init Lens lcheck = 0 while lcheck != 170: il = mb.spiTransfer([0,0xA,0,0xA,0], 400) lcheck = il[4] focalMin = 0 focalMax = 0 print "Init Lens" mb.lcd(1,'Init Lens ') il = mb.spiTransfer([0,0xA,0,0xA,0,0,0,0x80,0xA,0x98,1,0,0,0,0,0,0xB0,0,0,0,0xB0,0,0,0], 400) focalMin = (il[10] << 8) | il[11] focalMax = (il[12] << 8) | il[13] print "Focal", str(focalMin) + '-' + str(focalMax) print "F-Stop", str(fstops[int(il[21])]) + '-' + str(fstops[int(il[23])]) mb.lcd(1,'Focal ' + str(focalMin) + '-' + str(focalMax)) mb.lcd(2,'FStop ' + str(fstops[int(il[21])]) + '-' + fstops[int(il[23])]) time.sleep(2) # Wait and give some time to read the LCD mb.lcd() # Clear F-Stop (Full Open) print "Clear F-Stop" mb.lcd(1,'Clear F-Stop ') mb.spiTransfer([0x90,0,0,0,0xC,0x13,0x80,0x90,0,0,0xF,0xA,0],300) time.sleep(0.5) # F-Stop Full Close print "F-Stop Full Close" mb.lcd(1,'F-Stop Close ') mb.spiTransfer([0x13,0x58,0]) time.sleep(0.5) # Clear F-Stop (Full Open) print "Clear F-Stop" mb.lcd(1,'Clear F-Stop ') mb.spiTransfer([0x90,0,0,0,0xC,0x13,0x80,0x90,0,0,0xF,0xA,0],300) time.sleep(0.5) # Focus Test Far focusAmt = 100 print "Focus Test Far" mb.lcd(1,'Focus Test Far ') for x in range(20): mb.spiTransfer([0xA]) time.sleep(0.02) mb.spiTransfer([0x50,0x2F,0xE0,0,0,0xEA,0,0,0,0,0,0,0x44,0,focusAmt],300) time.sleep(0.02) mb.spiTransfer([0x90,0]) time.sleep(0.02) mb.spiTransfer([0xE,0]) time.sleep(0.1) # Focus Test Near focusAmt = 155 print "Focus Test Near" mb.lcd(1,'Focus Test Near ') for x in range(20): mb.spiTransfer([0xA]) time.sleep(0.02) mb.spiTransfer([0x50,0x2F,0xE0,0,0,0xE8,0,0,0,0,0,0,0x44,0xFF,focusAmt],300) time.sleep(0.02) mb.spiTransfer([0x90,0]) time.sleep(0.02) mb.spiTransfer([0xE,0]) time.sleep(0.1) mb.lcd(1,'Test Complete ')
Автор: alizar