viernes, 2 de marzo de 2018

Saber si el código se esta ejecutando en una Raspberry Pi

Estoy haciendo un código y deseo saber si se está ejecutando en una Orange Pi o en una Raspberry Pi

Para poder determinarlo se debe usar os.uname()

import os
os.uname()

Para la raspberry retorna:
posix.uname_result(sysname='Linux', nodename='raspberrypi', release='4.9.59-v7+', version='#1047 SMP Sun Oct 29 12:19:23 GMT 2017', machine='armv7l')

Para la orange:
posix.uname_result(sysname='Linux', nodename='OrangePI', release='3.4.39', version='#46 SMP PREEMPT Wed Nov 9 09:50:08 CST 2016', machine='armv7l')os.uname()
posix.uname_result(sysname='Linux', nodename='OrangePI', release='3.4.39', version='#46 SMP PREEMPT Wed Nov 9 09:50:08 CST 2016', machine='armv7l')

Best way to generate requeriments.txt

La mejor forma de generar un fichero requirements.txt

es con pipreqs

$ pip install pipreqs
$ pipreqs /path/to/project
Más info:
http://www.idiotinside.com/2015/05/10/python-auto-generate-requirements-txt/

jueves, 1 de marzo de 2018

Valid AVRDUDE Part model list

Valid parts are:
 uc3a0512 = AT32UC3A0512       [/home/pi/avrdude_gpio.conf:14158]
 c128     = AT90CAN128         [/home/pi/avrdude_gpio.conf:3255]
 c32      = AT90CAN32          [/home/pi/avrdude_gpio.conf:3639]
 c64      = AT90CAN64          [/home/pi/avrdude_gpio.conf:3447]
 pwm2     = AT90PWM2           [/home/pi/avrdude_gpio.conf:8684]
 pwm2b    = AT90PWM2B          [/home/pi/avrdude_gpio.conf:8877]
 pwm3     = AT90PWM3           [/home/pi/avrdude_gpio.conf:8867]
 pwm316   = AT90PWM316         [/home/pi/avrdude_gpio.conf:8904]
 pwm3b    = AT90PWM3B          [/home/pi/avrdude_gpio.conf:8891]
 1200     = AT90S1200          [/home/pi/avrdude_gpio.conf:1716]
 2313     = AT90S2313          [/home/pi/avrdude_gpio.conf:1945]
 2333     = AT90S2333          [/home/pi/avrdude_gpio.conf:2058]
 2343     = AT90S2343          [/home/pi/avrdude_gpio.conf:2186]
 4414     = AT90S4414          [/home/pi/avrdude_gpio.conf:1832]
 4433     = AT90S4433          [/home/pi/avrdude_gpio.conf:2310]
 4434     = AT90S4434          [/home/pi/avrdude_gpio.conf:2434]
 8515     = AT90S8515          [/home/pi/avrdude_gpio.conf:2517]
 8535     = AT90S8535          [/home/pi/avrdude_gpio.conf:2631]
 usb1286  = AT90USB1286        [/home/pi/avrdude_gpio.conf:11466]
 usb1287  = AT90USB1287        [/home/pi/avrdude_gpio.conf:11657]
 usb162   = AT90USB162         [/home/pi/avrdude_gpio.conf:11670]
 usb646   = AT90USB646         [/home/pi/avrdude_gpio.conf:11262]
 usb647   = AT90USB647         [/home/pi/avrdude_gpio.conf:11453]
 usb82    = AT90USB82          [/home/pi/avrdude_gpio.conf:11857]
 m103     = ATmega103          [/home/pi/avrdude_gpio.conf:2752]
 m128     = ATmega128          [/home/pi/avrdude_gpio.conf:3075]
 m1280    = ATmega1280         [/home/pi/avrdude_gpio.conf:9693]
 m1281    = ATmega1281         [/home/pi/avrdude_gpio.conf:9883]
 m1284    = ATmega1284         [/home/pi/avrdude_gpio.conf:4451]
 m1284p   = ATmega1284P        [/home/pi/avrdude_gpio.conf:4645]
 m1284rfr2 = ATmega1284RFR2     [/home/pi/avrdude_gpio.conf:10318]
 m128rfa1 = ATmega128RFA1      [/home/pi/avrdude_gpio.conf:10103]
 m128rfr2 = ATmega128RFR2      [/home/pi/avrdude_gpio.conf:10206]
 m16      = ATmega16           [/home/pi/avrdude_gpio.conf:3832]
 m161     = ATmega161          [/home/pi/avrdude_gpio.conf:5977]
 m162     = ATmega162          [/home/pi/avrdude_gpio.conf:4837]
 m163     = ATmega163          [/home/pi/avrdude_gpio.conf:5035]
 m164p    = ATmega164P         [/home/pi/avrdude_gpio.conf:4011]
 m168     = ATmega168          [/home/pi/avrdude_gpio.conf:7723]
 m168p    = ATmega168P         [/home/pi/avrdude_gpio.conf:7912]
 m169     = ATmega169          [/home/pi/avrdude_gpio.conf:5193]
 m16u2    = ATmega16U2         [/home/pi/avrdude_gpio.conf:12234]
 m2560    = ATmega2560         [/home/pi/avrdude_gpio.conf:9896]
 m2561    = ATmega2561         [/home/pi/avrdude_gpio.conf:10090]
 m2564rfr2 = ATmega2564RFR2     [/home/pi/avrdude_gpio.conf:10308]
 m256rfr2 = ATmega256RFR2      [/home/pi/avrdude_gpio.conf:10157]
 m32      = ATmega32           [/home/pi/avrdude_gpio.conf:5800]
 m324p    = ATmega324P         [/home/pi/avrdude_gpio.conf:4035]
 m324pa   = ATmega324PA        [/home/pi/avrdude_gpio.conf:4227]
 m325     = ATmega325          [/home/pi/avrdude_gpio.conf:12604]
 m3250    = ATmega3250         [/home/pi/avrdude_gpio.conf:12985]
 m328     = ATmega328          [/home/pi/avrdude_gpio.conf:8113]
 m328p    = ATmega328P         [/home/pi/avrdude_gpio.conf:8298]
 m329     = ATmega329          [/home/pi/avrdude_gpio.conf:5375]
 m3290    = ATmega3290         [/home/pi/avrdude_gpio.conf:5574]
 m3290p   = ATmega3290P        [/home/pi/avrdude_gpio.conf:5588]
 m329p    = ATmega329P         [/home/pi/avrdude_gpio.conf:5560]
 m32u2    = ATmega32U2         [/home/pi/avrdude_gpio.conf:12046]
 m32u4    = ATmega32U4         [/home/pi/avrdude_gpio.conf:11071]
 m406     = ATMEGA406          [/home/pi/avrdude_gpio.conf:14496]
 m48      = ATmega48           [/home/pi/avrdude_gpio.conf:7323]
 m48p     = ATmega48P          [/home/pi/avrdude_gpio.conf:7510]
 m64      = ATmega64           [/home/pi/avrdude_gpio.conf:2892]
 m640     = ATmega640          [/home/pi/avrdude_gpio.conf:9503]
 m644     = ATmega644          [/home/pi/avrdude_gpio.conf:4243]
 m644p    = ATmega644P         [/home/pi/avrdude_gpio.conf:4434]
 m644rfr2 = ATmega644RFR2      [/home/pi/avrdude_gpio.conf:10328]
 m645     = ATmega645          [/home/pi/avrdude_gpio.conf:12795]
 m6450    = ATmega6450         [/home/pi/avrdude_gpio.conf:12997]
 m649     = ATmega649          [/home/pi/avrdude_gpio.conf:5601]
 m6490    = ATmega6490         [/home/pi/avrdude_gpio.conf:5787]
 m64rfr2  = ATmega64RFR2       [/home/pi/avrdude_gpio.conf:10219]
 m8       = ATmega8            [/home/pi/avrdude_gpio.conf:6117]
 m8515    = ATmega8515         [/home/pi/avrdude_gpio.conf:6278]
 m8535    = ATmega8535         [/home/pi/avrdude_gpio.conf:6436]
 m88      = ATmega88           [/home/pi/avrdude_gpio.conf:7523]
 m88p     = ATmega88P          [/home/pi/avrdude_gpio.conf:7710]
 m8u2     = ATmega8U2          [/home/pi/avrdude_gpio.conf:12422]
 t10      = ATtiny10           [/home/pi/avrdude_gpio.conf:14451]
 t11      = ATtiny11           [/home/pi/avrdude_gpio.conf:1211]
 t12      = ATtiny12           [/home/pi/avrdude_gpio.conf:1275]
 t13      = ATtiny13           [/home/pi/avrdude_gpio.conf:1408]
 t15      = ATtiny15           [/home/pi/avrdude_gpio.conf:1583]
 t1634    = ATtiny1634         [/home/pi/avrdude_gpio.conf:14184]
 t20      = ATtiny20           [/home/pi/avrdude_gpio.conf:14461]
 t2313    = ATtiny2313         [/home/pi/avrdude_gpio.conf:8311]
 t24      = ATtiny24           [/home/pi/avrdude_gpio.conf:10339]
 t25      = ATtiny25           [/home/pi/avrdude_gpio.conf:8957]
 t26      = ATtiny26           [/home/pi/avrdude_gpio.conf:6594]
 t261     = ATtiny261          [/home/pi/avrdude_gpio.conf:6751]
 t4       = ATtiny4            [/home/pi/avrdude_gpio.conf:14407]
 t40      = ATtiny40           [/home/pi/avrdude_gpio.conf:14478]
 t4313    = ATtiny4313         [/home/pi/avrdude_gpio.conf:8500]
 t43u     = ATtiny43u          [/home/pi/avrdude_gpio.conf:10892]
 t44      = ATtiny44           [/home/pi/avrdude_gpio.conf:10523]
 t45      = ATtiny45           [/home/pi/avrdude_gpio.conf:9139]
 t461     = ATtiny461          [/home/pi/avrdude_gpio.conf:6942]
 t5       = ATtiny5            [/home/pi/avrdude_gpio.conf:14424]
 t84      = ATtiny84           [/home/pi/avrdude_gpio.conf:10707]
 t85      = ATtiny85           [/home/pi/avrdude_gpio.conf:9320]
 t861     = ATtiny861          [/home/pi/avrdude_gpio.conf:7133]
 t88      = ATtiny88           [/home/pi/avrdude_gpio.conf:7925]
 t9       = ATtiny9            [/home/pi/avrdude_gpio.conf:14434]
 x128a1   = ATxmega128A1       [/home/pi/avrdude_gpio.conf:13478]
 x128a1d  = ATxmega128A1revD   [/home/pi/avrdude_gpio.conf:13494]
 x128a1u  = ATxmega128A1U      [/home/pi/avrdude_gpio.conf:13504]
 x128a3   = ATxmega128A3       [/home/pi/avrdude_gpio.conf:13515]
 x128a3u  = ATxmega128A3U      [/home/pi/avrdude_gpio.conf:13525]
 x128a4   = ATxmega128A4       [/home/pi/avrdude_gpio.conf:13536]
 x128a4u  = ATxmega128A4U      [/home/pi/avrdude_gpio.conf:13594]
 x128b1   = ATxmega128B1       [/home/pi/avrdude_gpio.conf:13647]
 x128b3   = ATxmega128B3       [/home/pi/avrdude_gpio.conf:13706]
 x128c3   = ATxmega128C3       [/home/pi/avrdude_gpio.conf:13405]
 x128d3   = ATxmega128D3       [/home/pi/avrdude_gpio.conf:13458]
 x128d4   = ATxmega128D4       [/home/pi/avrdude_gpio.conf:13468]
 x16a4    = ATxmega16A4        [/home/pi/avrdude_gpio.conf:13136]
 x16a4u   = ATxmega16A4U       [/home/pi/avrdude_gpio.conf:13063]
 x16c4    = ATxmega16C4        [/home/pi/avrdude_gpio.conf:13116]
 x16d4    = ATxmega16D4        [/home/pi/avrdude_gpio.conf:13126]
 x16e5    = ATxmega16E5        [/home/pi/avrdude_gpio.conf:14053]
 x192a1   = ATxmega192A1       [/home/pi/avrdude_gpio.conf:13780]
 x192a3   = ATxmega192A3       [/home/pi/avrdude_gpio.conf:13796]
 x192a3u  = ATxmega192A3U      [/home/pi/avrdude_gpio.conf:13806]
 x192c3   = ATxmega192C3       [/home/pi/avrdude_gpio.conf:13717]
 x192d3   = ATxmega192D3       [/home/pi/avrdude_gpio.conf:13770]
 x256a1   = ATxmega256A1       [/home/pi/avrdude_gpio.conf:13880]
 x256a3   = ATxmega256A3       [/home/pi/avrdude_gpio.conf:13896]
 x256a3b  = ATxmega256A3B      [/home/pi/avrdude_gpio.conf:13917]
 x256a3bu = ATxmega256A3BU     [/home/pi/avrdude_gpio.conf:13927]
 x256a3u  = ATxmega256A3U      [/home/pi/avrdude_gpio.conf:13906]
 x256c3   = ATxmega256C3       [/home/pi/avrdude_gpio.conf:13817]
 x256d3   = ATxmega256D3       [/home/pi/avrdude_gpio.conf:13870]
 x32a4    = ATxmega32A4        [/home/pi/avrdude_gpio.conf:13225]
 x32a4u   = ATxmega32A4U       [/home/pi/avrdude_gpio.conf:13152]
 x32c4    = ATxmega32C4        [/home/pi/avrdude_gpio.conf:13205]
 x32d4    = ATxmega32D4        [/home/pi/avrdude_gpio.conf:13215]
 x32e5    = ATxmega32E5        [/home/pi/avrdude_gpio.conf:14105]
 x384c3   = ATxmega384C3       [/home/pi/avrdude_gpio.conf:13938]
 x384d3   = ATxmega384D3       [/home/pi/avrdude_gpio.conf:13991]
 x64a1    = ATxmega64A1        [/home/pi/avrdude_gpio.conf:13325]
 x64a1u   = ATxmega64A1U       [/home/pi/avrdude_gpio.conf:13341]
 x64a3    = ATxmega64A3        [/home/pi/avrdude_gpio.conf:13352]
 x64a3u   = ATxmega64A3U       [/home/pi/avrdude_gpio.conf:13362]
 x64a4    = ATxmega64A4        [/home/pi/avrdude_gpio.conf:13373]
 x64a4u   = ATxmega64A4U       [/home/pi/avrdude_gpio.conf:13241]
 x64b1    = ATxmega64B1        [/home/pi/avrdude_gpio.conf:13383]
 x64b3    = ATxmega64B3        [/home/pi/avrdude_gpio.conf:13394]
 x64c3    = ATxmega64C3        [/home/pi/avrdude_gpio.conf:13294]
 x64d3    = ATxmega64D3        [/home/pi/avrdude_gpio.conf:13305]
 x64d4    = ATxmega64D4        [/home/pi/avrdude_gpio.conf:13315]
 x8e5     = ATxmega8E5         [/home/pi/avrdude_gpio.conf:14001]
 ucr2     = deprecated, use 'uc3a0512' [/home/pi/avrdude_gpio.conf:14174]

FIX: Can't export GPIO 4 (AVRDUDE Raspberry)

Por alguna razón avrdude falla cuando se intenta utilizar el Pin 4 como RESET en una conexión ICSP.
Y muestra el siguiente error:
Can't export GPIO 4, already exported/busy?: Device or resource busy
avrdude done.  Thank you.

Para solucionarlo puedes usar otro puerto. Yo he usado el GPIO 12 y me fue de maravillas.



miércoles, 28 de febrero de 2018

Run remote x11 graphical application ssh in PyCharm

Intentando correr una aplicación grafica en mi raspberry pi utilizando pycharm me he conseguido con el siguiente error:

"tkinter.TclError: no display name and no $DISPLAY environment variable"


Esto ocurre porque para correr aplicaciones gráficas usando ssh se debe establecer la variable de entorno DISPLAY=:0
Para ello abrimos el RUN/DEBUG Configuration y la seteamos como en la siguiente imagen
NOTA: Note que el valor es :0 (Incluye el signo dos puntos)



Result:


autologin skype in linux

Para hacer que skype inicie automáticamente debe estar instalado gnome-keyring

Para ello:
sudo apt install gnome-keyring

Luego agregas la siguiente linea al autostart:
gnome-keyring-daemon --start --components=secrets

domingo, 25 de febrero de 2018

Mover ventana a la derecha o izquierda en KDE

Si queremos usar la funcionalidad de Windows de mover una ventana a la izquierda o derecha presionando Win + Left / Right
Debemos entrar en Shortcuts -> Global Shortcuts -> KWin y escribir "Tile" en la barra de busqueda