Internet móvil con el modem 3G USB Huawei E173 en la Raspberry Pi

Hacer funcionar un módem 3G USB en la Raspberry Pi puede ser un tema peliagudo. Es posiblemente la tarea con la que más tiempo he perdido en varias Raspberry Pis y con diferentes modelos de módem USB. Uno de los motivos es que estos “pinchos USB” suelen llevar una memoria interna, o una ranura para una tarjeta microUSB, y la Raspberry Pi no lo reconoce como un módem sino como un dispositivo de almacenamiento (que es la intención de los fabricantes, para que al conectarlo a un PC con Windows, este automáticamente instale los drivers desde el almacenamiento). Para solucionar esto, y que la Raspberry Pi reconozca al dispositivo como lo que es, un modem, hay que recurrir al programa usb-modeswitch, y hay que prepararse para dedicarle muchas horas de búsqueda por internet para tu configuración, y luego mil pruebas…

Voy a emplear el modem Huawei E173 (estrictamente, el E173u-2, como pone en su interior), que es muy común y baratito (se puede comprar en amazon o en eBay por menos de 30€, o también te lo regalan las operadoras cuando contratas “internet móvil”).

Modem 3G USB Huawei E173u-2

Modem 3G USB Huawei E173u-2

Modem 3G USB Huawei E173u-2

Modem 3G USB Huawei E173u-2

Que la Raspberry Pi reconozca el modem Huawei E173u-2

Con la Raspberry Pi A+ con la que estoy trasteando ahora mismo, parece que no voy a tener este problema. Lo sé porque si ejecuto el comando lsusb me sale, entre otros dispositivos USB que tengo conectados, este:

Bus 001 Device 003: ID 12d1:1446 Huawei Technologies Co., Ltd. E1552/E1800/E173 (HSPA modem)

Aún así, es mejor hacer mil pruebas reiniciando la Raspberry Pi y ver si lo sigue reconociendo, desconectar y reconectar el modem 3G USB, para ver si lo reconoce sin problemas en todas las situaciones. Una vez que estemos seguros de esto, podremos pasar al siguiente paso.

Antes de nada hay que asegurarse de que nuestra Raspberry Pi está bien alimentada, pues el modem 3G puede consumir bastante potencia. Lo segundo es que hayamos quitado el pin de la tarjeta SIM que hemos introducido en el modem 3G (esto generalmente lo podremos hacer o bien desde un móvil, o desde el programita/página web que salta por defecto al conectar el pincho a un PC).

Pero… mi gozo en un pozo. Aunque la descripción “HSPA modem” parecía apuntar a que estaba bien reconocido, no es así. Si sigo los pasos de los apartados siguientes, no me funciona. Así que me temo que hay que recurrir a usb-modeswitch y hacer que se reconozca como modem. Googleando parece que el id correcto es el 12d1:1433 (y no el 12d1:1446). Es decir, que al hacer lsusb debería salir esto:

ID 12d1:1433 Huawei Technologies Co., Ltd.

Pues vamos a por ello.

Ocurren cosas raras. Si desconecto el pincho, ejecuto el comando tail -f /var/log/messages sale:

Mar 21 19:07:23 pigorra1 kernel: [ 2378.375864] usb 1-1.5: new high-speed USB device number 10 using dwc_otg
Mar 21 19:07:23 pigorra1 kernel: [ 2378.478258] usb 1-1.5: New USB device found, idVendor=12d1, idProduct=1446
Mar 21 19:07:23 pigorra1 kernel: [ 2378.478299] usb 1-1.5: New USB device strings: Mfr=3, Product=2, SerialNumber=0
Mar 21 19:07:23 pigorra1 kernel: [ 2378.478317] usb 1-1.5: Product: HUAWEI Mobile
Mar 21 19:07:23 pigorra1 kernel: [ 2378.478335] usb 1-1.5: Manufacturer: HUAWEI Technology
Mar 21 19:07:23 pigorra1 kernel: [ 2378.484349] usb-storage 1-1.5:1.0: USB Mass Storage device detected
Mar 21 19:07:23 pigorra1 kernel: [ 2378.485426] scsi host14: usb-storage 1-1.5:1.0
Mar 21 19:07:23 pigorra1 kernel: [ 2378.486690] usb-storage 1-1.5:1.1: USB Mass Storage device detected
Mar 21 19:07:23 pigorra1 kernel: [ 2378.491085] scsi host15: usb-storage 1-1.5:1.1
Mar 21 19:07:23 pigorra1 usb_modeswitch: switching device 12d1:1446 on 001/010
Mar 21 19:07:24 pigorra1 kernel: [ 2379.418875] usb 1-1.5: USB disconnect, device number 10
Mar 21 19:07:28 pigorra1 kernel: [ 2383.495961] usb 1-1.5: new high-speed USB device number 11 using dwc_otg
Mar 21 19:07:28 pigorra1 kernel: [ 2383.598504] usb 1-1.5: New USB device found, idVendor=12d1, idProduct=1433
Mar 21 19:07:28 pigorra1 kernel: [ 2383.598544] usb 1-1.5: New USB device strings: Mfr=4, Product=3, SerialNumber=0
Mar 21 19:07:28 pigorra1 kernel: [ 2383.598565] usb 1-1.5: Product: HUAWEI Mobile
Mar 21 19:07:28 pigorra1 kernel: [ 2383.598583] usb 1-1.5: Manufacturer: HUAWEI Technology
Mar 21 19:07:28 pigorra1 kernel: [ 2383.602533] usb-storage 1-1.5:1.0: USB Mass Storage device detected
Mar 21 19:07:28 pigorra1 kernel: [ 2383.605914] option 1-1.5:1.0: GSM modem (1-port) converter detected
Mar 21 19:07:28 pigorra1 kernel: [ 2383.608156] usb 1-1.5: GSM modem (1-port) converter now attached to ttyUSB0
Mar 21 19:07:28 pigorra1 kernel: [ 2383.609015] usb-storage 1-1.5:1.1: USB Mass Storage device detected
Mar 21 19:07:28 pigorra1 kernel: [ 2383.617225] cdc_ether 1-1.5:1.1 wwan0: register 'cdc_ether' at usb-bcm2708_usb-1.5, Mobile Broadband Network Device, 02:50:f3:00:00:00
Mar 21 19:07:28 pigorra1 kernel: [ 2383.619344] usb-storage 1-1.5:1.3: USB Mass Storage device detected
Mar 21 19:07:28 pigorra1 kernel: [ 2383.621198] option 1-1.5:1.3: GSM modem (1-port) converter detected
Mar 21 19:07:28 pigorra1 kernel: [ 2383.622309] usb 1-1.5: GSM modem (1-port) converter now attached to ttyUSB1
Mar 21 19:07:28 pigorra1 kernel: [ 2383.623885] usb-storage 1-1.5:1.4: USB Mass Storage device detected
Mar 21 19:07:28 pigorra1 kernel: [ 2383.624851] option 1-1.5:1.4: GSM modem (1-port) converter detected
Mar 21 19:07:28 pigorra1 kernel: [ 2383.627728] usb 1-1.5: GSM modem (1-port) converter now attached to ttyUSB2
Mar 21 19:07:28 pigorra1 kernel: [ 2383.628387] usb-storage 1-1.5:1.5: USB Mass Storage device detected
Mar 21 19:07:28 pigorra1 kernel: [ 2383.631475] option 1-1.5:1.5: GSM modem (1-port) converter detected
Mar 21 19:07:28 pigorra1 kernel: [ 2383.632669] usb 1-1.5: GSM modem (1-port) converter now attached to ttyUSB3
Mar 21 19:07:28 pigorra1 kernel: [ 2383.633797] usb-storage 1-1.5:1.6: USB Mass Storage device detected
Mar 21 19:07:28 pigorra1 kernel: [ 2383.635312] scsi host21: usb-storage 1-1.5:1.6
Mar 21 19:07:29 pigorra1 kernel: [ 2384.637590] scsi 21:0:0:0: Direct-Access     HUAWEI   SD Storage       2.31 PQ: 0 ANSI: 2
Mar 21 19:07:29 pigorra1 kernel: [ 2384.641548] sd 21:0:0:0: Attached scsi generic sg1 type 0
Mar 21 19:07:29 pigorra1 kernel: [ 2384.641912] sd 21:0:0:0: [sdc] Attached SCSI removable disk
Mar 21 19:07:29 pigorra1 logger: usb_modeswitch: switched to 12d1:1433 on 001/011

Es decir, ¡se ha cambiado correctamente solo! Aparece en ttyUSB0 el modem GSM, en ttyUSB1, ttyUSB2 y ttyUSB3 tres modems GSM, y luego la tarjeta SD. Y el usb_modeswitch lo ha cambiado a 12d1:1433. Es justo lo que quiero, ¡pero yo no he hecho nada para merecerme esto!, simplemente desconectarlo y volverlo a conectar. Si hago lsusb sale correcto:

Bus 001 Device 011: ID 12d1:1433 Huawei Technologies Co., Ltd. 

Creo que ya sé por qué puede ser. Antes lo estaba probando en una Raspberry A+ a través de un concentrador USB con alimentación, y ahora estoy haciendo la prueba conectando directamente el modem USB a la Raspberry Pi (en una B+).

Pruebo reiniciando, desconectando y volviendo a conectar, y compruebo que en ocasiones se reconoce como dispositivo correcto (12d1:1433, es decir, que usb_modeswitch hace bien su trabajo), pero en otras no. Así que vamos a hacer que siempre se haga el cambio a 12d1:1433.

Vamos a ver qué es lo que pasa en las tripas de usb_modeswitch. Para ello, empezamos editando el fichero /etc/usb_modeswitch.conf haciendo que EnableLogging=1. De esta forma, el fichero de registro /var/log/usb_modeswitch_XXXXXXXXXXXX contendrá más información. Cada vez que desconecte y reconecte el modem USB, veré el contenido de ese fichero para ver los pasos que sigue el programa.

En la página web de Usb_modeswitch se explica muy bien el funcionamiento del programa. Como en mi caso parece ser que, cuando funciona, usb_modeswitch reconoce bien el dispositivo y lo cambia correctamente, esto significa que la configuración está ya en la base de datos. Lo que tengo que hacer es investigar e intentar el que a veces no funcione, para que funcione siempre.

Continuo probando. En el fichero /usr/share/usb_modeswitch/configPack.tar.gz encuentro el fichero 12d1:1446, con el siguiente contenido:

# Huawei, newer modems

TargetVendor=  0x12d1
TargetProductList="1001,1406,140b,140c,1412,141b,1432,1433,1436,14ac,1506,1511"

MessageContent="55534243123456780000000000000011062000000100000000000000000000"

Esto es lo que lee automáticamente, como puedo comprobar en el log. Podemos hacer que usb-modeswitch pase de esta configuración y lea la que nosotros queramos, si colocamos el fichero correspondiente en /etc/usb_modeswitch.d/. Por defecto está vacío, así que voy a crear ahí el fichero con el que haré pruebas:

sudo nano /etc/usb_modeswitch.d/12d1\:1443

(ojo con el \:). En ese fichero pegaré el contenido del que viene por defecto y le añadiré algunas cosa:

# Mis pruebas para Huawei E173u-2

TargetVendor=  0x12d1
TargetProductList="1001,1406,140b,140c,1412,141b,1432,1433,1436,14ac,1506,1511"

MessageContent="55534243123456780000000000000011062000000100000000000000000000"

<strong>WaitBefore=2</strong>

Como parece que pueda ser un problema de tiempos, añado WaitBefore=2 para que espere 2 segundos mientras se configura. Hago varias pruebas, aumentando el número de segundos. Me deja de funcionar cuando lo conecto en caliente (desconetar y reconectar mientras está funcionando), y sólo en ocasiones funciona cuando reinicio la Raspberry Pi. Así que parece que he ido a peor.

También pruebo a ejecutar el cambio manualmente con:

sudo usb_modeswitch -I -v 12d1 -p 1446 -V 12d1 -P 1433 -M "55534243123456780000000000000011062000000100000000000000000000"

Pero no me funciona…

La solución que he encontrado, que no es demasiado limpia pero por el momento funciona, es añadir lo siguiente en el /etc/rc.local, antes de exit 9:

sudo service udev stop
sleep 2
sudo service udev start

El /etc/rc.local se ejecuta en cada arranque, y añadiendo esas líneas le estamos diciendo que pare el servicio udev, espere 2 segundos y lo vuelva a arrancar.

Elimino el fichero que había colocado en /etc/usb_modeswitch.d/, edito el fichero /etc/usb_modeswitch.conf y vuelvo a dejar EnableLogging=0 para dejarlo todo como estaba originalmente. Reinicio un par de veces con el modem enchufado y parece que todo funciona. Así que puedo pasar al siguiente paso.

Instalando el demonio pppd, UMTSKeeper y Sakis3G

El programa más utilizado para realizar la conexión 3G es Sakis3g. Sin embargo, antes de lanzarnos a instalarlo, tenemos que saber que es muy frecuente perder la conexión 3G cada cierto tiempo, por lo que se suele recurrir a otro programa, UMTSKeeper, que está constantemente comprobando la conexión y recuperándola cuando se cae. Como este último programa instala por su cuenta Sakis, no es necesario que instalemos Sakis.

Así que empezamos. Lo primero es instalarse el servicio pppd:

sudo apt-get install ppp

A continuación instalamos UMTSKeeper:

cd ~
mkdir umtskeeper
cd umtskeeper
wget "http://mintakaconciencia.net/squares/umtskeeper/src/umtskeeper.tar.gz"
tar -xzvf umtskeeper.tar.gz
chmod +x sakis3g umtskeeper

Ahora, configuramos sakis:

sudo ./sakis3g --interactive 
Configruación Sakis 3G Pantalla 1

Configuración Sakis 3G Pantalla 1

Configruación Sakis 3G Pantala 2

Configuración Sakis 3G Pantalla 2

Configuración Sakis 3G Pantalla 3

Configuración Sakis 3G Pantalla 3

Configuración Sakis 3G Pantalla 4

Configuración Sakis 3G Pantalla 4

Configuración Sakis 3G Pantalla 5

Configuración Sakis 3G Pantalla 5

Configuración Sakis 3G Pantalla 6

Configuración Sakis 3G Pantalla 6

Configuración Sakis 3G Pantalla 7

Configuración Sakis 3G Pantalla 7

Si ahora hago ifconfig, obtengo, entre otras cosas:

ppp0      Link encap:Point-to-Point Protocol  
          inet addr:88.29.135.146  P-t-P:10.64.64.64  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:7 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:130 (130.0 B)  TX bytes:333 (333.0 B)

Así que efectivamente, tenemos conexión a internet por ppp0.

Y por último, configuro UMTSKeeper. Ejecuto el siguiente comando (una sola línea), que luego añadiré a /etc/rc.local para que se ejecute siempre que se arranque la Raspberry Pi:

sudo /home/pi/umtskeeper/umtskeeper --sakisoperators "USBINTERFACE='0' OTHER='USBMODEM' USBMODEM='12d1:1433' APN='movistar.es' CUSTOM_APN='movistar.es' APN_USER='0' APN_PASS='0'" --sakisswitches "--sudo --console" --devicename 'Huawei' --log --silent --monthstart 8 --nat 'no' --httpserver &>> /home/pi/umtskeeper/error.log &

Consulto el fichero /var/log/umtskeeper.log y veo que está todo en orden. Pruebo a desconectar y reconectar el pincho USB, y veo que tras medio minuto vuelve a conectarse automáticamente.

Así que he conseguido:

  1. Que la Raspberry Pi reconozca el modem USB 3G como modem y no como unidad de alamacenamiento, y que lo haga tras un reinicio
  2. Que se conecte a internet a través del modem USB
  3. Que mantenga la conexión mientras la Raspberry Pi esté fucnionando, bien tras caidas de la red, o por desenchufar-reenchufar el modem 3G

¡Prueba superada!

Referencias

Sensor BMP085 de presión barométrica, altitud y temperatura en la Raspberry Pi

Vamos a jugar con el sensor BMP085, que es un barómetro y termómetro digital de muy fácil uso y versátil en la Raspberry Pi. Las especificaciones de este sensor se pueden encontrar aquí.

Sensor BMP085 conectado a una Raspberry Pi Model A+

Sensor BMP085

Conectamos el sensor BMP085 a la Raspberry Pi según el siguiente esquema:

  • VCC al pin1 (3V3)
  • SDA al pin3 (GPIO 0, SDA)
  • SCL al pin5 (GPIO 1, SCL)
  • GNA al pin6 (por ejemplo) GND
Sensor BMP085 conectado a una Raspberry Pi Model A+

Sensor BMP085 conectado a una Raspberry Pi Model A+

La Raspberry Pi puede acceder al sensor por medio del bus I2C. Para poder usar este bus, debemos antes instalar:

sudo apt-get install python-smbus

(Se instalará automáticamente i2c-tools; si no, ejecutar: sudo apt-get install i2c-tools).
También hay que habilitar el soporte a I2C en el núcleo. Ejecutamos sudo raspi-config:

Captura de pantalla 2015-03-20 a las 19.20.05

Captura de pantalla 2015-03-20 a las 19.21.48

Captura de pantalla 2015-03-20 a las 19.22.50

Captura de pantalla 2015-03-20 a las 19.24.55

Captura de pantalla 2015-03-20 a las 19.25.30

Captura de pantalla 2015-03-20 a las 19.25.47

Ahora debemos editar el fichero:

sudo nano /etc/modules

Y añadir las dos siguientes líneas al final:

i2c-bcm2708 
i2c-dev

Y luego debemos editar el fichero:

sudo nano /etc/modprobe.d/raspi-blacklist.conf

y comentar (añadir una # delante de la línea), las dos siguientes líneas:

#blacklist spi-bcm2708
#blacklist i2c-bcm2708

(En mi caso, la segunda línea ya estaba comentada).

Ahora hay que editar el siguiente fichero:

sudo nano /boot/config.txt

Y añadir las dos siguientes líneas al final:

dtparam=i2c1=on
dtparam=i2c_arm=on

Reiniciamos la Raspberry Pi (sudo reboot).

Si ya tenemos conectado el sensor y ejecutamos el siguiente comando:

sudo i2cdetect -y 1

Deberíamos obtener algo así:

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- 77

Esto ya nos dice que en 0x77 está conectado nuestro dispositivo.
Vamos a acceder al sensor por medio de una librería python, desarrollada por Adafruit. Para ello ejecutamos los siguientes comandos:

sudo apt-get update
sudo apt-get install git build-essential python-dev python-smbus
git clone https://github.com/adafruit/Adafruit_Python_BMP.git
cd Adafruit_Python_BMP
sudo python setup.py install

Con esto ya se ha instalado la librería. Podemos probar el siguiente ejemplo:

cd examples
sudo python simpletest.py

que produce el siguiente resultado:

Temp = 24.90 *C
Pressure = 92647.00 Pa
Altitude = 748.91 m
Sealevel Pressure = 92643.00 Pa

¡Y con esto ya tenemos funcionando el sensor BMP085!

Para usar la librería, será tan sencillo como copiar los ficheros Adafruit_BMP085.py y Adafruit_I2C.py al mismo directorio que tu fichero python, y añadir al comienzo:


from Adafruit_BMP085 import BMP085
bmp = BMP085(0x77)

Y luego, las funciones a emplear son:


temperatura = bmp.readTemperature()
presion = bmp.readPressure()
altitud = bmp.readAltitude()

Referencias

Sensor de temperatura DS18B20 en la Raspberry Pi

El sensor DS18B20 es un termómetro digital que se puede utilizar con la Raspberry Pi de forma muy sencilla. Consulta sus especificaciones aquí.

Está disponible en varios formatos: como transistor suelto, como módulo (con la resistencia incorporada, listo para ser usado) o en su versión sumergible.

Transistor DS18B20

Transistor DS18B20

Sensor DS18B20 como módulo

Sensor DS18B20 como módulo

Sensro DS18B20 sumergible

Sensor DS18B20 sumergible

Sensores DS18B20: transistor suelto, en módulo y sumergible

Sensores DS18B20: transistor suelto, en módulo y sumergible

Vamos a empezar con el transistor suelto. Es necesario que coloquemos una resistencia “pull-up” de 4K7 ohmios, y lo conectemos a la Raspberry Pi según el siguiente esquema:

Esquema de conexión de DS18b20 a la Raspberry Pi

Esquema de conexión de DS18b20 a la Raspberry Pi (tomado de REUK.co.uk)

DS18B20 conectado a la Raspberry Pi

DS18B20 conectado a la Raspberry Pi B

Una vez conectado, la lectura de la temperatura es muy sencilla; se hace leyendo un fichero. Basta seguir los siguientes pasos (el primer paso es necesario sólo si tienes un Kernel superior al 3.18 que salió para dar soporte a la Raspberry Pi 2). Primero, hay que editar el siguiente fichero:

sudo nano /boot/config.txt

Y añadir al final del mismo:

# 1-wire settings
dtoverlay=w1-gpio,gpiopin=4

Salimos del editor nano (pulsando CTRL-X y luego S, y luego ENTER, para salir guardando el fichero).

Tras esto hay que reiniciar la Raspberry Pi. Una vez ha reiniciado, ejecutamos los siguientes comandos:

sudo modprobe w1-gpio
sudo modprobe w1-therm

A continuación tenemos que ir al siguiente directorio, y listar su contenido:

cd /sys/bus/w1/devices
ls

Aparecerán varios directorios, entre ellos uno (o varios, si tenemos varios termómetros conectados), con el nombre 28-XXXXX. 28-XXXXX es el número de serie de nuestro termómetro, diferente para cada transistor. Por ejemplo, este termómetro es 28-0000052cd55d. Entramos en ese directorio (reemplazando XXXXX por nuestro código), y leemos el fichero w1_slave:

cd 28-XXXXX
cat w1_slave

La salida será algo así:

87 01 4b 46 7f ff 09 10 48 : crc=48 YES
87 01 4b 46 7f ff 09 10 48 t=24437

La temperatura viene expresada en mºC. En la salida anterior dice t=24437, que tenemos que dividir por 1000 para tener la temperatura en ºC, es decir: 24.437 ºC.

Con los otros sensores se procede de la misma manera. El módulo se conecta directamente, sin necesidad de añadir la resistencia (ya la lleva incluida); el sumergible sin embargo sí necesita la resistencia.

Módulo DS18B20 conectado a la Raspberry Pi B

Módulo DS18B20 conectado a la Raspberry Pi B

Sensor DS18B20 sumergible conectado a la Raspberry Pi B

Sensor DS18B20 sumergible conectado a la Raspberry Pi B

Podemos colocar muchos sensores en paralelo, con una sola resistencia para todos ellos. Como cada sensor tiene un código diferente, aparecerán carpetas para cada uno de ellos, y no tendremos más que leer el que queramos.

Esquema de conexión de varios DS18B20 a la Raspberry Pi (tomado de )

Esquema de conexión de varios DS18B20 a la Raspberry Pi (tomado de REUK.co.uk)

Dos sensores DS18B20 conectados a la Raspberry Pi

Dos sensores DS18B20 conectados a la Raspberry Pi

Este procedimiento para obtener la temperatura es un poco rupestre, así que vamos a optimizarlo, creando un pequeño script bash y luego otro en python.

Tomar la temperatura desde un script bash

Para el script en bash, leer el fichero y quedarnos con la temperatura es fácil. El problema es que ese número tenemos que dividirlo por 1000, y, aunque sorprenda, en bash no se puede dividir… Así que instalamos el pequeño programa bc:

sudo apt-get install bc

Y ya podemos editar un pequeño bash, que he llamado temp.sh:

#!/bin/bash

tempsenso=$(grep "t=" /sys/bus/w1/devices/28-00000560a4e2/w1_slave | cut -d\= -f2)
echo "scale=3; $tempsenso/1000" | bc

Podemos modificar el número de decimales modificando scale=. Lo he puesto igual a 3 decimales, que es la precisión con la que muestra los resultados el sensor DS18B20.

 Tomar la temperatura en pyhton

En python procederíamos de forma muy similar:

# -*- coding: utf-8 -*-

def get_temp_sens():
        tfile = open("/sys/bus/w1/devices/28-00000560a4e2/w1_slave")
        text = tfile.read()
        tfile.close()
        secondline = text.split("\n")[1]
        temperaturedata = secondline.split(" ")[9]
        temperature = float(temperaturedata[2:])
        temperature = temperature / 1000
        return float(temperature)

mensaje = str(get_temp_sens()) + " ºC"

print(mensaje)

(La primera línea es para que salga bien el símbolo º).

 

Un último comentario y es que usar estos termómetros junto con la cámara de la Raspberry Pi puede dar algún problema.

 

Referencias

Raspberry Pi

This is an example page. It’s different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this:

Hi there! I’m a bike messenger by day, aspiring actor by night, and this is my blog. I live in Los Angeles, have a great dog named Jack, and I like piña coladas. (And gettin’ caught in the rain.)

…or something like this:

The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.

As a new WordPress user, you should go to your dashboard to delete this page and create new pages for your content. Have fun!