Close

Project log for using Jay Dosher's script

A project log for Parabolic solar hot water heater

Goal: To finish building an Open Source parabolic hot water heater.

fred-frazellefred frazelle 01/19/2016 at 16:530 Comments

The following is a non-programmer's attempts to integrate python scripts from Jay Doser into our project using a Raspberry Pi, an H-bridge and an IMU. As you can see, it's in Spanish so if you wish help with the translation, please feel free to contact us.

We decided to stop trying to use a commercial electronic circuit with LEDs because they were always getting confused by the reflections from the collector so since we were going to use a Pi for sending the temperature data to the net anyway, we figured we might as well go all the way and try and use Jay's python program (although it's for two motors and ours only needs one) to oriente the collector.

Calentador parabólica solar de agua

Rastreador del Sol y el Raspberry Pi

8 de diciembre de 2015

Es muy dificil empezar este proyecto pero se me ocurrió hacerlo por partes.

1a Parte Configurar el Raspberry Pi

Bueno, hoy revisé las partes existentes para ver qué hacía falta. Cable para Etherenet – presente. Cable para power – media presente. Falta la parte que va a la pared. Tarjete SD – presente – 4 Gb. ¡Creo que tengo hasta 4 de las medidores de temperatura de tres patas – Dallas 1820 Digital One-wire! We need the 4.7K-10K resistor. A la tienda...

Arg, ¿dónde está la lista de comandos para ssh y el Pi? No se encuentran. A volver a empezar.

Jalál encontró el último cable. Ya podemos conectar la pantalla/teclado Motorola al Pi. A actualizar los programas con Synaptic – a esperar – 250 Mb. para bajar. Como no hemos actualizado desde que compramos el Pi posiblemente no vaya muy bien esta actualización y habrá que simplemente reinstalar el OS. Ug. Mi bad. Tuve que reiniciar el Pi y Synaptic se averió. Reiniar otra vez y NO usar Synaptic sino Aptitude Package Manager (ver Others in Menu).

Luego a establecer una conexión VPN o SSH para poder trabajar desde LaGrandota directamente. Aha – SSH. Usando LaGrandota, abrir Terminal, ssh pi@192.168.1.69 (o lo que sea su IP – conseguir IP desde Router, Home Network, buscar Raspberrypi. Luego, todavía en Term, “tightvncserver” para empezar el server en el Pi. Luego, en LaGrandota, se puede usar tightvncserver – creo. Nope. Usar XfVNC Viewer. Campos: Computer name: 192.168.1.69; Screen: 1; Password: 48.... ¡Éxito! ¡Vemos la pantalla del Pi! “shutdown -h now” desde el Term as root apaga el Pi.

Como cambiar las contraseñas...

http://www.modmypi.com/blog/how-to-change-the-default-account-username-and-password

Como instalar y configurar wifi

http://www.megaleecher.net/Raspberry_Pi_WiFi_Installation_And_Configuration_Guide

2a Parte Configurar la medición de la temperatura

A. Programación

Un enlace para hacerlo en Bash https://www.raspberrypi.org/forums/viewtopic.php?f=37&t=54238

Pero, ¿dónde está la foto del alambrado?

B. Configuración eléctrica

Muy explícito: http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/temperature/

11 diciembre

Bueno, ya tengo todo. Hice las conexiones con soldadura y la ayuda de Yuguito. Coloqué el producto en el Raspi, arranqué el Raspi y seguí las instrucciones

pi@raspberrypi:~$ sudo modprobe wire

pi@raspberrypi:~$ sudo modprobe w1-gpio

pi@raspberrypi:~$ sudo modprobe w1-therm 
luego...
pi@raspberrypi:~$ cat /sys/bus/w1/devices/w1_bus_master1/w1_master_slave_count

Sin resultado ò más bien me dijo que no había nada ahí. Bueno, seguimos mañana. Quiza es el resistor después de todo.

12 de diciembre

No lee. No reporta. Ug. Usamos el foro del Pi y

http://www.electronicspoint.com/threads/raspberry-pi-and-ds1820-challenge.276678/#post-1674855 para conseguir ayuda.

También pusimos:

w1-gpio
w1-therm

en /etc/modules para que comienzan cuando arranqué el Pi. Nota> Esto ya no es necesario porque ya se pone #device tree config que se explica abajo.

13 de diciembre

Uf. Ha pasado tanto... Tuvimos problemas para hacer que el Pi leyera el DS pero por fin nos dimos cuenta que habíamos insertado

# device tree config

dtoverlay=w1-gpio,gpiopin=4

en /boot/config.ntx en vez de /boot/config.txt. Al corregir esto y correr el comando ya nos reportó correctamente nuestra primera lectura.

También checamos las lecturas de los pins: +3.3V y GND si dan más o menos 3.3V. Entre la parte inferior de la resistencia y GND nos dio una voltaje fluctuante de 3.16V a 1.79V – supongo que esto quiere decir que está haciendo las lecturas y las está reportando.

También incorporamos el programa de aquí http://www.sbprojects.com/projects/raspberrypi/temperature.php de Sam en un archivo get_temp.txt en /home/pi/Documents que se correo con “./get_temp.txt”, y produce la temperatura ya dividido entre 1,000.

3a Parte Mandar la medición a sitio de internet

Esto podría ayudar... http://webshed.org/wiki/RaspberryPI_DS1820

Esto finds all your sensors automatically, reads the temperatures, checks for errors, does a re-read if there was an error, then logs the results to individual sensor files

https://www.raspberrypi.org/forums/viewtopic.php?p=481436&sid=f842e18c34ea925bddfcfa55346eba14#p481436

Más abajo (en el enlace de arriba) está el comando de cómo crear un programa Chron para que automáticamente correo el programa cada x minutos.

Quizá esto sea útil también: http://weworkweplay.com/play/rebooting-the-raspberry-pi-when-it-loses-wireless-connection-wifi/ - lol.

15 diciembre

Esto es para instalar y configuar Privateeyepi programa que usamos para aprender a mandar los datos al internet a la página de Privateeyepi. No olvides usar los datos que reporta nuestra w1 para el subprograma de dallas.py. Ya tenemos un cron job corriendo para mandar los datos cada 5 minutos. También usé el subdir de /home/pi para manejar el programa en vez de /home. Parece que el cron job también entra en funciones aún cuando se apaga el Pi y se enciende otra vez! ¡Yea!

http://www.projects.privateeyepi.com/automate-your-alarm

16 diciembre

Bueno, ya con el aprendizaje anterior, fuimos a buscar un mejor sitio de internet, encontrando VQWVM6MRHHNTGCK9 www.thingspeak.com estabecimos una cuenta y ... a ver si podemos mandar los datos. Fuimos aquí: http://www.raspberrypi-spy.co.uk/2015/06/basic-temperature-logging-to-the-internet-with-raspberry-pi/ para establecer los programas. Aquí está el foro: http://community.thingspeak.com/forum/

Pequeño programa para salvar los datos localmente – todavía no lo usamos...

#!/usr/bin/env python

import glob, os
from datetime import datetime

out = open("temp.csv", "a")
date = str(datetime.now())
ds = glob.glob('/sys/bus/w1/devices/28-*/w1_slave')
for d in ds:
    name = d.split("/")[-2]
    temp = str(float(open(d).read().split()[-1][2:])/1000)
    print >> out, ";".join([date, name, temp])
out.close()

Encontré un programa para mandar los datos a ThingsSpeak de aquí: http://nergiza.com/como-hacer-un-registrador-de-temperatura-online-con-raspberry-pi/#comment-45244 y ya lo tengo en el Pi. Lo traté de correr, después de poner la clave de ThingsSpeak pero me arroja un error en el #4 renglón de sintáxis. Ya dejé un comentario en el Foro de Nergiza y ... hay que esperar una respuesta.

17 de diciembre

Bueno, revisamos el archivo registradoradetempertura.py de /home/pi/Documents y encontramos muchos problemas por el famoso copy/paste de espacios extras e indentaciones malas, etc. Entonces lo comparamos con el original del internet, hicimos los cambios y ¡bingo! Nos manda el primer reporte a ThingSpeak. Luego configuramos el crontab para que reporte cada cinco minutos y ¡listo! -- Éxito.

4a Parte El Motor – Usar el Raspi para mover el motor q' mueve la parábola

17 diciembre – continuado

Ahora, el programa para mover el motor...

1. Primer paso: otra vez conseguir todos los partes. Ya – Marvel tenía H Bridge $180 M.N. y unos cables.

2. Construir el circuito en breadboard y http://deepaksinghviblog.blogspot.mx/2014/08/raspberrypi-to-run-dc-motor-using-l298n.html – buen esquemático.

3. Probar la conexión al motor y que avanza y retrocede y luego

4. Buscar programa para localizar el sol y configuarlo y probarlo.

5a Parte Agregar funciones al programa de movimiento de motor (empezar a cierta hora, terminar a cierta hora, quizá controlar el aparato desde el Android, establecer temperatura máxima después del cual se manda un “stop” al aparato para que no se sobrecaliente, etc.)

18 diciembre

Bueno, pudimos conectar todos los componentes, pero no se mueve el motor. Cambiamos de fuente a 12VDC 2Amp pero todavía no se mueve. Qué extraño. Hay que ver qué está pasando. ¡¡Supuestamente es un motor nuevo!!

Empezamos (cual brincadores) a trabajar también en lo inalábrico para el Pi. Encontramos que sí teníamos un WiFi para USB y lo probamos pero resultó muy lento y eventualmente se descontectó.

También nos llego el conector de 26 pins del Pi y su cable y su adaptador que va insertado en el breadboard.

19 diciembre

Bueno, hoy empezamos updating y upgrading el Pi. Probamos el Pi otra vez y ¡¡¡parece que funciona de maravilla con WiFi!!! ¡Yea! Ya está mandanado otra vez datos a ThingSpeak (TS).

Al parecer ThingSpeak tiene para bajar a tu compu todos los datos que has acumulado. Estoy checando para saber cuánto se puede almacenar en sus servidores.

El motor grande no funciona. Quien sabe qué le pasa. Simplemente no da vueltas. Conseguí de la mesa de arriba otro motor, uno chiquito. Lo chequé con la conexión a 12V y da vueltas, rápido. Voy a sacar el eliminador de corriente menos fuerte – creo que es de 5V. Creo que este es el programito que vamos a usar/probar... De aquí:

http://deepaksinghviblog.blogspot.mx/2014/08/raspberrypi-to-run-dc-motor-using-l298n.html

import RPi.GPIO as GPIO

from time import sleep


GPIO.setmode(GPIO.BOARD)

GPIO.setup(13, GPIO.OUT)

GPIO.setup(15, GPIO.OUT)


def forward(x):

GPIO.output(13, GPIO.HIGH)

sleep(x)

GPIO.output(13, GPIO.LOW)


def reverse(x):

GPIO.output(15, GPIO.HIGH)

sleep(x)

GPIO.output(15, GPIO.LOW)


forward(3)

sleep(0.5)

reverse(3)


GPIO.cleanup()

A ver qué pasa – lol.

20 diciembre

Bueno, muchas horas y todavía no entiendo porque el motor no avanza. Hoy estamos revisando diferentes sitios de internet para ver si puedo encontrar un lugar con información más clara. Codigo para leer los pins del Pi: gpio readall.

Muy bien. ¡Ya tenemos un motor que avanza y retrocede! Tuve que bajar e instalar “git” y luego un programa para poder usar el comando “gpio readall” para poder darme cuenta que el alambre que va del Pi al breadboard no estaba en GND sino en uno de los GPIO. Al cambiar esto, ayudó. Luego me di cuenta que no estaban bien los números BCM en el código. Los arreglé y ahora el motor4.py funciona bien. ¡Yea!

5a Parte – Integrar el program motor4.py en el programa de posición del Sol

Qué tal si seguimos mañana.

Oooooops, parece que vamos a necesitar un MU? 9 grados de libertad también! Bueno, de todos modos me preguntaba cómo iba a saber el programa del Sol en qué posición se encontraba. Ya sabemos, por medio del sensor 9DOF. SparkFun los tiene en $75. U.S., uf. The 9DOF Razor IMU incorporates three sensors - an ITG-3200 (MEMS triple-axis gyro), ADXL345 (triple-axis accelerometer), and HMC5883L (triple-axis magnetometer)

21 diciembre

Mandé pedir http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=261868777455 Sensores digitales de temperatura para agua y http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=251132396500 que es un 9DOF 9axis degree of freedom IMU sensor ITG3200/ITG320.

22 diciembre

Además descubrí que el sistema de Jay Dosher funciona con un servidor de páginas web Apache2. Tuve que bajarlo al Pi, instalarlo y configurarlo. Ya funciona. Aquí están las instrucciones para instalar y configurar: https://www.raspberrypi.org/documentation/remote-access/web-server/apache.md

Pasé los demás archivos al Pi, creando los directorios y subdirectorios necesarios y también cambiando los nombres. Aquí está la lista y en dónde están:

dos.htaccess /var/www/config/ and renamed .htaccess

inputs.txt /var/www/config/ and renamed inputs.html

Ahora a probar y resolver los problemas – lol. Una copia del original de estos archivos están guardados en /home/frazelle09/Documents/Fred/Productos_Ramirez_fraz/Solar/AguaCaliente/Archivos_de_Jay_Dosher en LaGrandota.

24 diciembre

Esperando a los circuitos electrónicos – a ver qué podemos avanzar en cuanto a los programas.

1. dos.htaccess, con nuevo nombre de .htaccess Parece que no impide el funcionamiento del servidor de páginas del Pi... pero que es para la protección del sitio de internet.

2. inputs.txt Con nuevo nombre inputs.html es un programa que se corre desde el navegador con 192.168.1.76/inputs.html y te presenta con un formato para llenar con los datos> longitud, latitud, etc. Hay que checar qué hace con la nueva información porque tiene un botón al calce que dice: Submit. Otro que dice Reset. Al llenar el forulario y Submit, llega una nueva página Internal Server Error. El botón de Reset sí funciona, borrando todos los datos ya ingresados.

3. 20150823-01-adafruitio.pyBásicamente este programa manda los datos a Adafruit. ???

4. masterinputs.txtEs un archivo que contiene los mismo 12 variables que “inputs.html” . Quien sabe por que. Otro misterio. La lista empieza con [myvars] lo que quiere decir, creo, my variables.

5. solarrobot7-coreEste es el programa más grande y supongo que es el que realmente hace los cálculos y mueve el motor – ¿será? - De renglones (líneas de código)! Consigue los valores de “masterinputs.txt” y manipula un banco de datos “rrdtool” que debe llegar a estar colocado en “

6. calibration.py Este programa toma los datos contenidos en “masterinputs.txt” y los va revisando uno por uno y los que no están son suplidos por valores pre-determinados – ¿¡y ya!? Es un programa que asegura que todos los datos están listos para ser utilizados. Puesto que ya contiene datos predeterminados, esos podrían ser suplidos por los datos locales (longitud, latitud, etc.) sin el programa de inputs.html. Parece que no sólo abre masterinputs.txt, sino escribe a ese archivo también, posiblemente preparandolo para que sea el archivo de dónde se sacan los valores para solarrobot7-core (que vamos a llamar aquí core7).

¡Pan comido! Hice una parcial – hasta donde pude porque no tengo pythonsolar instalado – debug del programa, por lo menos en cuanto a los indents concierne.

25 diciembre

Listo. Bajé pysolar de aquí... http://pysolar.org/ a LaGrandota. Mencionó que 3.x no estaba funcionando con ??? pero no supe cómo instalarlo.

Parece que también necesitamos rrdtool para /usr/bin/rrdtoo así que lo bajé de Synaptic, también a LaGrandota – yea – otro programa disponible fácilmente. Extrañamente se instaló en ese subdirectorio. Falta bajar e instalarlos en el Pi. También bajé nano de Synaptic a LaGrandota para editar los programas de python. El Pi ya lo tenía.

Cómo instalar un module (en este caso Pysolar)? Parece que va a ser un poco retador.

7 de diciembre

Bueno. Vamos a hacer algo de lo que hicimos en LaGrandota en el Pi: instalar y copiar al Pi y actualizar por medio de Synaptic (become “root”, su, contraseña. Luego, apt-get update. Luego, apt-get upgrade.Finalmente, apt-get clean. Para bajar e instalar rrdtool, “apt-get install rrdtool -y”. “” para desinstalarlo; “” para quitarlo totalmente del sistema; “apt-cache search 'mi archivo'” para buscarlo. Lol – bueno, copié la carpeta de pysolar al Pi a /var/www/. A ver en dónde deben de estar los archivos realmente. El pysolar dice que necesita python-numpy, lo cual ya está instalado. Instalé en el Pi también “locate”.

28 diciembre

Al parecer ya tenemos “pip” funcionando en LaGrandota. Para instalar pytz solo hay que correr “pip install pytz”. Para checar, correr python con python, luego “import pytz”, y si no reporta errores, ya está instalado el módulo. Usar Ctl-D para terminar python3. Muy interesante...

python-pip no está instalado en el Pi. Apt-get update, apt-get upgrade, apt-get install python-pip -y. Al parecer, con pip instalado, no hay que bajar pytz. Pip lo hace y lo instala también. Uf. Y, ahora, ¿qué?

29 diciembre

Encontrar magnetic declination para ingresar a masterinputs.txt ó inputs.html. Resulta ser, para la casa = 11.29° E. Comentaron en el foro de PCLinuxOS (PCL) que python ya viene con pytz instalado – lol. Uf. Falta instalado python-serial, también. Empezar a correr el programa principal solarrobot7-core.py para empezar a debug.

a. Primer error – no encuentra módulo “pulldom”.

30 diciembre

Python está en /usr/lib64/python2.7/site-packages para python 2.7. ¡Aha! Para los comandos con python, hay que incluir el “3”, como “python3 solarrobot7-core.py” en vez de simplemente “python solarrobot7-core.py”. Ya no aparece la falta de “pulldom”.

b. Segundo error, ya con “python3” (getcurheading() <> 999): Marca error en <> Quien sabe qué pasa ahí. Hubo que cambiarlos a “!=” en vez de “<>” porque <> que no funciona en python 3.x

c. No estaba instalado “module serial”. Usé Synaptic para recorrer todas las instancias de python para ir seleccionando los indicados para python3. Luego, si “serial” todavía no aparece, unziplo y copiarlo desde LaGrandota al Pi, y correr “python3 setup.py install”.

d. from dual mc33926_rpi import motors, MAX_SPEED, ImportError: No module named 'dual_mc33926_rpi'.

31 diciembre

d. Continuado... dual_mc33926_rpi es un programa en python que se baja del internet. Puesto que python espera que sea un “módulo”, vamos a buscar cómo integrarlo en python 3 como tal. Es el programa que trabaja con el Pi y los motores (en nuestro caso, un sólo motor). Lo copié a mi subdirectorio en LaGrandota y le cambié el nombre de “simple_program.py” a “dual_mc33926_rpi.py”. Esta es la página que explica qué hace: https://github.com/pololu/dual-mc33926-motor-driver-rpi . Oh. Está disponible como un zip que usa python3 para instalar como módulo. Qué bueno. Antes de poder usar el “dual”, habrá que instalar WiringPi y WiringPi2-Python. Uf. Para conseguir Wiring, etc., tuve que instalar “git”. “apt-get install git-core”. Uf, otros 37 Mb. Lo bueno es que también este sitio contiene las instrucciones de cómo instalar “dual”. ¡Yea! Lo malo es que Wiring, etc. sólo corre en el Pi y no lo vamos a poder probar en LaGrandota, así que vamos a tener que cambiar al Pi y trabajar ahí – más lento.

Entonces, ya en el Pi, apt-get update, apt-get upgrade. Esperar. Ya copié solarrobot7 y el folder de pysolar. Ya tiene python3 – por lo menos. Corrí el programa solarrobot7 y me dio otra vez problema con “serial”. Unzip pyserial-3.0 en LaGrandota y copiar folder al Pi. Luego, seguir instrucciones del 30 de diciembre. Boom. Done. Correr programa otra vez... Oops. No module con nombre “pysolar”. Como ya teníamos el folder pysolar traté de hacer lo mismo que hicimos con serial, pero reporta que no tiene “setuptools”. ¿Huh? Hay que instalar pip3 para bajar e instalar “setuptools” para python3 porque si no, te lo instala para python2.7. No quizo instalar pip3. Bueno, mientras, vamos a instalar “git”. Ya estaba instalado. A instalar Wiring, etc. Esta vez funcionó. Lo mismo para WiringPi2. Ya está. El último comando “python setup.py install” no funcionó. Seguimos con “dual...” con “git”, según las instrucciones del sitio de internet de pololu. Sí funcionó con python3. Quizá hay que “reinstalar” WiringPi2 por medio de bajar el zip y usar python3... Corrimos solarrobot7 otra vez y todavía no está pysolar. Ug. Usando “apt-get install python3-pip” nos baja otros 42Mb. - lol. Correr programa otra vez. Todavía no está pysolar – se me olvidó instalarlo – lol. Ya se hace tarde. Instalé pysolar sin problema con “python3 setup.py install”. Correr prog. Otra vez. Falta el módulo wiringpi2. Uf. Aquí están las instrucciones para hacerlo con python3: https://github.com/Gadgetoid/WiringPi2-Python . Hecho. Correr prog. Otra vez. No está módulo “ConfigParser”. Hora de películas.

1 enero de 2016

d. Continuado... “ConfigParser”. O.K. Usando “pip-3.2 install configparser” - éxito. Correr prog. Otra vez. El mismo error. O.K. La palabra ConfigParser estaba mal. Usar “configparser”. Hubo que corregir las línes de código.

e. Renglón 30. Cambié configparser.configparser() en configparser.ConfigParser()

f. Ahora, llega al 33.

Traceback (most recent call last):

File "solarrobot7-core.py", line 33, in <module>

maplat = float(config.get("myvars", "maplat"))

File "/usr/lib/python3.2/configparser.py", line 771, in get

d = self._unify_values(section, vars)

File "/usr/lib/python3.2/configparser.py", line 1112, in _unify_values

raise NoSectionError(section)

configparser.NoSectionError: No section: 'myvars'

No existe la sección myvars in configparser.py. ¿Porque? Sepa la bola. Solo veo “vars”.

2 enero de 2016

f. Continuado... “ConfigParser”. O.K. Todavía buscando respuesta. Hice un post en StackOverflow... http://stackoverflow.com/questions/34570363/configparser-nosectionerror-no-section-myvars A ver qué pasa. El masterinputs.txt tenia un “.” demasiado entre masterinputs y txt. Uf. También me aconsejaron de agregar dos renglones. Luego los pongo aquí.

g. Correr prog. Siguiente reto:

traceback (most recent call last):

File "solarrobot7-core.py", line 237, in <module>

tomorrow_static = tomorrow_heading()

File "solarrobot7-core.py", line 176, in tomorrow_heading

if Pysolar.GetAltitude(maplat, maplon, datetime.datetime.utcnow()) < 0:

NameError: global name 'Pysolar' is not defined

Bueno, Pysolar está mal escrito. Los cambié a pysolar.

h. Correr prog. Siguiente reto:

Traceback (most recent call last):

File "solarrobot7-core.py", line 237, in <module>

tomorrow_static = tomorrow_heading()

File "solarrobot7-core.py", line 176, in tomorrow_heading

if pysolar.get_altitude(maplat, maplon, datetime.datetime.utcnow()) < 0:

AttributeError: 'module' object has no attribute 'get_altitude'

Solution provided from here... http://stackoverflow.com/questions/34582018/attributeerror-module-object-has-no-attribute-get-altitude

We placed “from pysolar import solar” on the line just before “def getrawazmuth()” and tested. Same error, but no new one. Then, changed pysolar to solar in the line “if pysolar.get_altitude(maplat,...)” to pysolar.get_altitude...” y probar. Yea!

i. Siguiente prob. :

solarrobot7-core.py", line 238, in <module>

tomorrow_static = tomorrow_heading()

File "solarrobot7-core.py", line 181, in tomorrow_heading

tomorrow_heading = solar.GetAzimuth(maplat, maplon, sunrise_time)

AttributeError: 'module' object has no attribute 'GetAzimuth'

GetAzimuth se llama get_azimuth in “solar.py”. Renombrar. Correr prog.

j. Siguiente prob.

Traceback (most recent call last):

File "solarrobot7-core.py", line 256, in <module>

if (getcurheading() < getsolarheading()) and (getsolarangle() > 2) and (getcurheading() != 999):

File "solarrobot7-core.py", line 118, in getcurheading

serialport.write("\x23o0 \x23f")

File "/usr/local/lib/python3.2/dist-packages/serial/serialposix.py", line 518, in write

d = to_bytes(data)

File "/usr/local/lib/python3.2/dist-packages/serial/serialutil.py", line 58, in to_bytes

raise TypeError('unicode strings are not supported, please encode to bytes: %r' % (seq,))

TypeError: unicode strings are not supported, please encode to bytes: '#o0 #f'

¡Yes to bytes! Agregé para convertir los en bytes:

a renglones 114 – 116:

Vamos a tratar de convertir a bytes

a_string = '\x23o0 \x23f Python'

by = a_string.encode('utf-8')

También cambié el renglón serialport.write(“\x23o0 \x23f “) a serialport.write(by)

k. Correr prog. Siguiente reto>

Traceback (most recent call last):

File "solarrobot7-core.py", line 261, in <module>

if (getcurheading() < getsolarheading()) and (getsolarangle() > 2) and (getcurheading() != 999):

File "solarrobot7-core.py", line 126, in getcurheading

words = headresponse.split(",")

TypeError: Type str doesn't support the buffer API

Parece que tiene que ver con j. arriba. Ug. Creo que está esperando un string y llega un byte – lol.

En renglón 126 agregé “b” en words = headresponse.split(b”,”)

Ver: http://stackoverflow.com/questions/28431269/typeerror-type-str-doesnt-support-the-buffer-api-when-splitting-string

l. Correr prog. Siguente reto:

Traceback (most recent call last):

File "solarrobot7-core.py", line 261, in <module>

if (getcurheading() < getsolarheading()) and (getsolarangle() > 2) and (getcurheading() != 999):

File "solarrobot7-core.py", line 135, in getcurheading

return curheading

UnboundLocalError: local variable 'curheading' referenced before assignment

Discussions