viernes, 19 de octubre de 2018

Problemas que te pueden pasar después de instalar Debian 9


Página principal

Problemas que te pueden pasar después de instalar Debian 9




Debian 9.3 no funciona con adaptadores externos de USB Wifi.
Lo primero debemos estar seguro que hemos instalado los firmware. Por defecto en Debian no instala los firmware (ubuntu instala todos), debemos instalarlos previamente los paquetes mediante Synaptic.
Solución:
Añadir en /etc/NetworkManager/NetworkManager.conf 
 [device]
wifi.scan-rand-mac-address=no

Hago reiniciar las redes con:

/etc/init.d/network-manager restart
/etc/init.d/networking restart

Ahora funciona, ya puedo probar todos mis adaptadores USB-WIFI


En el caso que tengáis varios linux en diferentes particiones, os pasará un error en la próxima vez que entréis en la otra distribución.
Esto es debido que el linux cuando se instala, formatea por defecto la partición de intercambio swap. Pero resulta que le cambia la identificación de nombre, que es como reconoce linux las particiones. Al reiniciar el primer linux, no encuentra el nombre partición que dio el, y se pasa 1:30 minutos pensando.
Este es el sintoma:
ERROR de Running /scripts/local-premount 
Running /scripts/local-premount ... Begin: Waiting for suspend/resume device ... Begin: Running /scripts/local-block ... done.
Running /scripts/local-block ... done.
Running /scripts/local-block ... done.
Running /scripts/local-block ... done.
Running /scripts/local-block ... done.
Running /scripts/local-block ... done.
Running /scripts/local-block ... done.
Running /scripts/local-block ... done.

Gave up waiting for suspend/resume device.

La forma de arreglarlo siendo root es mediante la orden:
update-initramfs -u
 
o
update-initramfs -u -k all

Probar una u otra y ahora lo normal es que se arregle.
Yo también cambio el fichero /etc/fstab , quito la etiqueta y lo sustituyo por la referencia directa,lo prefiero.

# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sdb5 during installation
/dev/sdb5 / ext4 errors=remount-ro 0 1
# swap was on /dev/sda9 during installation
/dev/sda9 none swap sw 0 0
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0


La tarjeta gráfica que tengo:
VGA compatible controller: NVIDIA Corporation C61 [GeForce 7025 / nForce 630a] (rev a2)
En principio Debian 9.x instala por defecto el controlador libre nouveau.
Pero resulta que no es demasiado estable con aplicaciones 3D, y lo normal es que se cuelgue.
Debemos instalar el controlador propietario de Nvidia.
echo -e "blacklist nouveau" > /etc/modprobe.d/fbdev-blacklist.conf
echo -e "options nouveau modeset=0" > /etc/modprobe.d/modesetting.conf

echo "deb http://deb.debian.org/debian stretch main contrib non-free " >> /etc/apt/sources.list
echo "deb-src http://deb.debian.org/debian stretch main" >> /etc/apt/sources.list
apt-get update
apt-get install nvidia-detect
apt-get install linux-headers-$(uname -r) nvidia-legacy-304xx-driver
Reiniciamos el ordenador y se soluciona los cuelgues.


El entorno de escritorio PLASMA (KDE) , no funciona o funciona raro.
Resulta que el entorno gráfico utiliza muchos efectos en 3D, y mi tarjeta no es muy compatible con el OpenGL, el resultado es el mal funcionamiento de PLASMA.
La solución es cambiar el Método de renderizado a Xrender.
Desde otro entorno de escritorio, por ejemplo MATE, entrar en el:
  • Centro de control.
  • Preferencias del sistema KDE.
  • Tema espacio de trabajo.
  • Compositor.



Ahora podremos entrar en PLASMA.
Debemos ser honesto, por lo menos en KDE se puede cambiar la forma de renderizado para hacerlo por software. En Gnome no he podido deshabilitar la aceleración gráfica por hardware, por lo que no he podido hacerlo funcionar (me parece increíble hasta donde llego Gnome). :(

Saludos
Juan

martes, 16 de octubre de 2018

Caja de tienda con lector de código de barras

Página principal


Gambas
Caja de tienda
con
lector de código de barras


Teniendo un lector de código de barras, se me pasó por la cabeza hacer una registro de caja de tienda.
Para una fácil realización del programa, lo he realizado en Gambas (V.Basic para Linux).
El programa debía almacenar productos con los códigos de barras, nombre del producto y precio.
Cuando se lee el código de barras, busca en su registro el correspondiente código, si existe añade el precio al ticket. Si no existe el código, abre un dialogo para dar de alta el producto.
También tiene un registro de los movimientos, para una posible revisión.
El registro de los diferentes productos se realiza en un fichero de tipo *.csv , el cual puede abrirse con un editor de textos  o con una hoja de cálculo. Tener cuidado en no introducir ENTER sin motivo, da error al cargar el programa.

Si tenéis que imprimir etiquetas de código de barras os recomiendo ver el artículo:
http://seta43.blogspot.com/2018/10/crear-etiquetas-de-codigo-de-barras-con.html

El programa es simple, y cumple su función, no pretendo nada mas.





VIDEO DE FUNCIONAMIENTO





PROGRAMA



Saludos
Juan Galaz

Bibliografía:

http://seta43.blogspot.com/2018/10/crear-etiquetas-de-codigo-de-barras-con.html

miércoles, 10 de octubre de 2018

Arduino Sensor de temperatura Modelo KNEISSEL 433MHz

Página principal

Arduino
Sensor de temperatura
Modelo KNEISSEL
433MHz
xsetaseta@gmail.com

Continuando con el proyecto de receptores de sensores comerciales externos , ahora nos toca el modelo KNEISSEL.


El programa se basa en el anterior, lo único que cada fabricante codifica los datos de forma diferente.
En este caso la onda de  datos mandados tienen este formato:

Como vemos los bit mandados son 24.
En este modelo se mandan los grados divididos, por una parte los decimales y por otro los grados.

El arduino transforma estas ondas en datos decimales que son mandados al PC por medio del interface  serie mediante el USB.
Datos transmitidos :   1,22,2,196,24
Datos:
  • 1-canal.
  • 2-grados.
  • 3-decimal.
  • 4-El primer byte mandado.
  • 5-bits recibidos, deberán siempre ser 24.


Realizado en Gambas (Visual Basic para Linux)

Dispongo de dos sensores y no he podido comprobar si realmente están bien programado la detección de canales.
Lo curioso es que no existe un conmutador para cambiar el número de canal.
Para este modelo solo he realizado el programa en Gambas.

PROGRAMA


Hasta pronto.
JUAN GALAZ

Bibliografía:

receptores de sensores comerciales externos
setacom.html
hantek.html
https://fetzerch.github.io/2014/11/15/reveng433/
https://es.aliexpress.com/item/1pair-2pcs-433mhz-rf-transmitter-and-receiver-kit-For-Wireless-Power-switch-socket-remote-control-LED/32311933574.html?spm=a2g0s.9042311.0.0.lWlrua

domingo, 7 de octubre de 2018

Arduino Sensor de temperatura Modelo prinston 433MHz

Página principal

Arduino
Sensor de temperatura
Modelo prinston
433MHz
xsetaseta@gmail.com

Continuando con el proyecto de receptores de sensores comerciales externos , ahora nos toca el modelo prinston.


El programa se basa en el anterior, lo único que cada fabricante codifica los datos de forma diferente.
En este caso la onda de  datos mandados tienen este formato:

Como vemos los bit mandados son 36.
Los primeros 14 bit contienen codificación propia y estado de batería.
los siguientes 2 bit corresponden al canal,
La temperatura son los siguientes 12 bits,
Y el porcentaje de humedad utiliza 8 bits.

El arduino transforma estas ondas en datos decimales que son mandados al PC por medio del interface  serie mediante el USB.
Datos transmitidos :    Canal,02,Grados,00232,Humedad,024,Control,9003


Realizado en Gambas (Visual Basic para Linux)


Con las librerías wxwidgets en Windows y Linux.

PROGRAMA


Hasta pronto.
JUAN GALAZ

Bibliografía:

receptores de sensores comerciales externos
setacom.html
hantek.html
https://fetzerch.github.io/2014/11/15/reveng433/
https://es.aliexpress.com/item/1pair-2pcs-433mhz-rf-transmitter-and-receiver-kit-For-Wireless-Power-switch-socket-remote-control-LED/32311933574.html?spm=a2g0s.9042311.0.0.lWlrua

martes, 2 de octubre de 2018

Crear etiquetas de código de barras con gLabels

Crear etiquetas con gLabels

Por necesidad estuve el otro día buscando programas para hacer etiquetas de código de barras. Las etiquetas debían de ser reconocidas por el lector  MX009-2MA7C .
El programa debía funcionar en Linux, y el mejor programa que encontré fue gLabels.
Este programa tiene la posibilidad que utilizando una hoja de textos crear etiquetas con sus datos.
He creado este vídeo a modo de tutorial, espero que les guste.



Saludos.
Juan Galaz

domingo, 30 de septiembre de 2018

wxwidgets - Base de datos de libros SQLite - Lector código de barras MX009-2MA7C

Informática

wxwidgets
 Base de datos de libros
SQLite
Lector código de barras
MX009-2MA7C

Este artículo es una continuación de wxwidgets-Base de datos de libros-SQLite .
A pocos días de la realización de la base de datos de libros, por casualidades del destino, me dejaron un lector de código de barras MX009-2MA7C.
El lector funciona como un teclado mas, traslada el código de barras a código numérico, tecleando el código como si fuera un teclado, ademas de pulsar ENTER.
En pocos minutos añadí una entrada de texto (en verde), donde el lector introduce el código y lo busca en la base de datos.

El programa con el cambio realizado.


Probando el lector de código de barras.

Da gusto ver como en 1 segundo te busca el libro en la base de datos, después de leer el código de barras.
El programa lo he compilado solo en Linux, en cualquier momento lo compilo también en Windows.
Solo tienes que copiar el fichero ejecutable en el directorio donde está la base de datos  libros.sqlite .

PROGRAMA


Saludos.
Juan Galaz

viernes, 28 de septiembre de 2018

wxwidgets Base de datos de libros SQLite

Informática

wxwidgets
 Base de datos de libros
SQLite


Buscando por internet encontré una base de datos de libros, estaba realizada para access microsoft. Era del programa abies 2 que se utilizaba para una gestión de  bibliotecas escolares.
La página del proyecto es http://www.abies.es/web/ , ahora el proyecto se basa en web, por lo que faltan en mi base de datos muchos libros desde hace 10 años hasta ahora.
Me puse manos a la obra y la base de datos en formato mdb la pase a formato sqlite.
La base de datos consta de 388.000 libros, 200.000 autores, y 50.000 editoriales.
Por lo que podéis ver es bastante grande, era una experiencia nueva trabajar con tanta cantidad de libros, por lo que lo tome como un reto.
En primer lugar hice pruebas con los autores, y me dí cuenta que era un problema las mayúsculas y  los acentos, en las búsquedas.
Había autores que los habían escrito de diferentes formas, Garcia, García, GARCIA, GARCÍA.
En MySQL había una solución, pero en SQLite no funcionaba.
Esto era un problema en las búsquedas, por lo que tome la solución mas drástica, poner todo en mayúsculas y quitar acentos.
También me pasó con las editoriales, por lo que también pasé todo a mayúsculas y quitar acentos.
El programa lo he realizado solo para consultas, por lo que no se puede añadir nada a la base de datos.
Anteriormente había realizado el mismo programa en Gambas (Visual Basic para Linux):
                01/08/2018 - Gambas -Base de datos de libros con SQLite. LIBROS
Existe una librería llamada  wxSQLite, pero no he querido utilizarla.
He utilizado parte del código realizado en el programa hecho para consola para no complicarme mucho.
El programa se realiza en Linux, y cuando funciona bien se intenta compilar en Windows.
El problema ocurre al utilizar las diferentes versiones de las librerías wxwidgets.


Funcionando Linux.


Funcionando en Windows.


Funcionando en Linux pero con Wine.

La base de datos consta de 3 tablas o bases de datos, Fondos,Autores,Editoriales.
La base de datos principal es Fondos, en esta se encuentran los los libros con su  IdAutor y IDEDITORIAL, que son numeros enteros.
Los  campos IdAutor y IDEDITORIAL enlazan a las bases de datos o tablas, de Autores y Editoriales, donde se encuentran los nombres de cada autor y editorial.
En resumen son 3 bases de datos con datos enlazados o datos vinculados.

PROGRAMA


Saludos.
Juan Galaz




Como curiosidad existe una página web donde se encuentra una base de datos de libros inmensa.
REBECA: registros bibliográficos para bibliotecas públicas españolas


Bibliografía:

https://poesiabinaria.net/2015/03/usando-sqlite-en-nuestros-programas-en-cc/
http://apuntes-para-no-olvidar.blogspot.com/2012/01/conectar-con-una-bd-de-sqlite-en-c.html
http://www.aprendoencasa.com/index.php/2014/02/12/base-de-datos-sqlite-con-el-lenguaje-de-programacin-c/

miércoles, 19 de septiembre de 2018

Base de datos autores - SQLite y wxwidgets en Linux y windows

Página principal

Base de datos autores
SQLite y wxwidgets
Linux y windows


En el anterior artículo había realizado una base de datos de autores utilizando la consola, ahora toca hacer un entorno gráfico con la librería wxwidgets.
Existe una librería llamada  wxSQLite, pero no he querido utilizarla.
He utilizado parte del código realizado en el programa hecho para consola para no complicarme mucho.
El programa se realiza en Linux, y cuando funciona bien se intenta compilar en Windows.
El problema ocurre al utilizar las diferentes versiones de las librerías wxwidgets.
Ejemplo:
En la librería 3.1.1 simplemente se imprime un puntero de cadena con:
    MiLista->SetItem(z, 1, sqlite3_column_text(resultado, 0));
Si utilizamos 2.8.12 debemos emplear:
    sprintf(Stemporal,"%s ",sqlite3_column_text(resultado, 0));     
    StringTmp=wxString::FromUTF8(Stemporal);
    MiLista->SetItem(z, 1, StringTmp);

Esto es solo lo que he tenido que cambiar para compilar en las dos librerías.
He visto que en Windows  y con la librería 3.1.1 el repintado de wxListCtrl no funciona bien.
Por lo demás funciona todo bien y se puede ver el resultado en las imágenes.


Windows.


Linux en Debian 9


En Linux pero bajo Wine.

PROGRAMA

Saludos.
Juan Galaz

Bibliografía:

https://poesiabinaria.net/2015/03/usando-sqlite-en-nuestros-programas-en-cc/
http://apuntes-para-no-olvidar.blogspot.com/2012/01/conectar-con-una-bd-de-sqlite-en-c.html
http://www.aprendoencasa.com/index.php/2014/02/12/base-de-datos-sqlite-con-el-lenguaje-de-programacin-c/

martes, 18 de septiembre de 2018

Lenguaje C - Base de datos autores - Compilar SQLite bajo windows

Página principal


Lenguaje C
Base de datos autores
Compilar SQLite bajo windows


En el anterior artículo había realizado una base de datos de autores dbautor.html .
Estaba realizado y compilado bajo Linux, ahora toca explicar como se compila bajo Windows.
No es que sea difícil, pero hay que realizar unas pequeñas modificaciones para que el compilador funcione.
La página donde he sacado la información es esta:
http://www.aprendoencasa.com/index.php/2014/02/12/base-de-datos-sqlite-con-el-lenguaje-de-programacin-c/

Se descarga de la página de descargas de SQLite  https://www.sqlite.org/download.html?  los siguientes ficheros:
sqlite-amalgamation-3250000.zip   y   sqlite-dll-win32-x86-3250000.zip
Pueden variar la versión de descarga.

Se descomprimen en un directorio.
Copiar sqlite3.dll a Windows/system  o en mismos directorio del ejecutable.
Creamos la librería  con la orden:  dlltool -D sqlite3.dll -d sqlite3.def -l libsqlite3dll.a
La librería creada libsqlite3dll.a se copia a   C:\TDM-GCC-32\lib
Se copia sqlite3.h a C:\TDM-GCC-32\include
Para crear el programa ejecutable se utiliza la orden: gcc autorw.c  -lsqlite3dll  -o autorw.exe


Captura del programa funcionado bajo windows.

Debido a que windows no tiene la librería #include <termios.h>  que dispone Linux , he eliminado las rutinas correspondientes.
Estas rutinas solo hacían que no se necesitase pulsar ENTER cada vez que pulsáramos una tecla.

PROGRAMA

Saludos.
Juan Galaz

Bibliografía:

https://poesiabinaria.net/2015/03/usando-sqlite-en-nuestros-programas-en-cc/
http://apuntes-para-no-olvidar.blogspot.com/2012/01/conectar-con-una-bd-de-sqlite-en-c.html
http://www.aprendoencasa.com/index.php/2014/02/12/base-de-datos-sqlite-con-el-lenguaje-de-programacin-c/

martes, 7 de agosto de 2018

Base de datos autores en Lenguaje C y con SQLite, terminal linux


Página principal


Lenguaje C
Base de datos autores
SQLite


En el anterior artículo había realizado una base de datos de libros librosx.html . La había programado en Gambas(Visual Basic para linux) con una extensión que tiene gambas para manejar SQLite.
La programación en Basic es muy fácil, los que tenemos algunos años hemos crecido con el Basic que venía integrado en la mayoría de los ordenadores.
Algunos el lenguaje Basic miran como lenguaje de segunda, pero para la mayoría de las aplicaciones es suficiente.
Como otro de los lenguajes que mas me gustan es el C, he intentado realizar un pequeño programa de consultas que funcione en terminal Linux y en lenguaje C.
Lo que en principio pensé fácil se convirtió en complicado, no había muchos ejemplos, y los que había mezclaban C++  con la utilización de librerías.
Todo es romperse la cabeza, mirar de un lado a otro buscando y buscando, prueba error hasta encontrar la solución.
El programa es simple, búsqueda de autores, búsqueda por IdAutor (único para cada autor), y listado desde un   registro.





  VIDEO DE FUNCIONAMIENTO



PROGRAMA

Saludos.
Juan Galaz

Bibliografía:

https://poesiabinaria.net/2015/03/usando-sqlite-en-nuestros-programas-en-cc/
http://apuntes-para-no-olvidar.blogspot.com/2012/01/conectar-con-una-bd-de-sqlite-en-c.html

miércoles, 1 de agosto de 2018

Gambas - Base de datos de libros con SQLite

Página principal

Gambas
Base de datos de libros
SQLite


Hace unos años realicé una base de datos sobre películas que tenía grabadas. Estaba realizado en Gambas (visual Basic para Linux), y utilizaba SQLite para manejar los datos.
Buscando por internet encontré una base de datos de libros, estaba realizada para access microsoft. Era del programa abies 2 que se utilizaba para una gestión de  bibliotecas escolares.
La página del proyecto es http://www.abies.es/web/ , ahora el proyecto se basa en web, por lo que faltan en mi base de datos muchos libros desde hace 10 años hasta ahora.
Me puse manos a la obra y la base de datos en formato mdb la pase a formato sqlite.
La base de datos consta de 388.000 libros, 200.000 autores, y 50.000 editoriales.
Por lo que podéis ver es bastante grande, era una experiencia nueva trabajar con tanta cantidad de libros, por lo que lo tome como un reto.
En primer lugar hice pruebas con los autores, y me dí cuenta que era un problema las mayúsculas y  los acentos, en las búsquedas.
Había autores que los habían escrito de diferentes formas, Garcia, García, GARCIA, GARCÍA.
En MySQL había una solución, pero en SQLite no funcionaba.
Esto era un problema en las búsquedas, por lo que tome la solución mas drástica, poner todo en mayúsculas y quitar acentos.
También me pasó con las editoriales, por lo que también pasé todo a mayúsculas y quitar acentos.
El programa lo he realizado solo para consultas, por lo que no se puede añadir nada a la base de datos.


En la versión 2 existe una casilla donde se puede escanear con un lector de código de barras.

La base de datos consta de 3 tablas o bases de datos, Fondos,Autores,Editoriales.
La base de datos principal es Fondos, en esta se encuentran los los libros con su  IdAutor y IDEDITORIAL, que son numeros enteros.
Los  campos IdAutor y IDEDITORIAL enlazan a las bases de datos o tablas, de Autores y Editoriales, donde se encuentran los nombres de cada autor y editorial.
En resumen son 3 bases de datos con datos enlazados o datos vinculados.
El programa me ha quedado digno, aunque con una espina en la velocidad al inicio. Cuando se emplea la orden TablaFondos = Conexion.Exec("Select * from Fondos") tarda unos 5 segundos en actualizar la base de datos. Ya sé que es grande pero he visto en otros programas que lo hacen mas rápido. Existe un truco, pero no lo he querido emplear de momento.


Los dos diferentes diálogos para seleccionar autor y editorial.

El que quiere ver como funciona el programa antes de bajarlo, he realizado un video de funcionamiento.
VIDEO

PROGRAMA BINARIO CON BASE DE DATOS DE LIBROS V2

PROGRAMA FUENTE V2

Saludos.
Juan Galaz




Como curiosidad existe una página web donde se encuentra una base de datos de libros inmensa.
REBECA: registros bibliográficos para bibliotecas públicas españolas


Bibliografía:

Para aprender utilizar SQLite con gambas he utilizado los siguientes enlaces:
http://gambas.sourceforge.net/es/main.html  Página oficial de gambas
http://www.gambas-es.org/index.php  Foro de gambas
http://help-gambas.blogspot.com/  Página con algún tutorial de gambas
https://jsbsan.blogspot.com/  Blog Mis Proyectos en Gambas
http://gambeando.wordpress.com/  Página donde existen buenos tutoriales explicados de gambas.
http://www.fidojones.com/category/gambas/  Página sobre programas en gambas y algún otro programa relacionado con facturación. Me mando un programa hecho en gambas que me ayudo mucho en la realización del mio, gracias.
http://gambaswiki.org/wiki/howto/databasesqlite



martes, 24 de julio de 2018

Arduino nano Radio RDA5807 Control mediante un PC con RDS

Página principal


Arduino nano
Radio RDA5807
Control mediante un PC con RDS


Hace uno años hice raardu.html pero no había realizado la decodificación del RDS.
En este montaje realizo la decodificación del RDS, parecido a lo que hice en rards.html visualizando los datos en un LCD, pero ahora los datos los muestro en un PC.


Circuito.

El programa se ha realizado en Gambas una especie de Visual Basic para Linux.
Debido a que la codificación de caracteres en el RDS es un diferencia al código ascii he quitado acentos y cambiado las Ñ por N.



El programa se ha realizado en Gambas una especie de Visual Basic para Linux.
Cuando tenga tiempo y ganas lo realizaré en C para Windows y Linux


La programación se ha realizado con Arduino 1.05 y bajo Debian 9 .
He detectado que con versiones de Arduino 1.6 y 1.8 se producen errores en la compilación debido al cambio en la librería  Wire.
No he querido buscar la solución, por lo cual el que quiera probar el circuito deberá utilizar la versión 1  de arduino.

PROGRAMA

Saludos.
Juan Galaz


Bibliografía:

radiofm.html
rards.html
ardura.html
 
http://arduino.vom-kuhberg.de/index.php
RADIO DATA SYSTEM- RDS- Por: Aitzol Zuloaga Izaguirre.
http://www.rds.org.uk/2010/Overview.htm

jueves, 19 de julio de 2018

Programando aplicaciones X windows system - Radio RDA5807

Página principal


Programando aplicaciones
X windows system
Radio RDA5807


El otro día estuve revisando alguna aplicación gráfica que había realizado en linux y tuve la desagradable sorpresa que no funcionaba.
Era debido a las diferentes bibliotecas dinámicas que utilizaban los diferentes programas. Habían cambiado de versiones muchas de ellas, o en el peor de los casos habían cambiado de nombre o desaparecido. Como ejemplo la versión de las librerías wxwidgets que viene en Debian 8 y Debian 9, los programas o los vuelves a compilar o no funcionan.
Era triste ver como no funcionaban los programas que has hecho hace 2 años, en cambio un programa realizado en Windows 95 si funciona en Windows XP o W7.
Es una de las buenas cosas que hizo Windows, la retrocompatibilidad, aunque no funciona en el 100% de los programas.

Había una excepción en programas realizados por mi, eran los programas realizados basados en X windows system que  hacen uso de una biblioteca llamada Xlib, estos programas si funcionan.
Los programas como xcolu1.zip , reten.zip realizados en 1999 funcionan perfectamente en 2018, y esto es debido a emplear librerías X Windows.

Aprovechando que estaba metido en el aprendizaje de C++, me propuse hacer Clases con las librerías X Windows.
Hace tiempo hice raardu.html  una radio con Arduino nano y el chip RDA5807, también había realizado diferentes programas para manejar la radio mediante el PC.
Los programas se habían realizado en C y C++ , con la librerías SDL y wxwidgets, también lo había realizado en diferentes lenguajes Basic.
Ahora he realizado el programa que maneja la radio utilizando las librerías X Windows.



PROGRAMA.

Para probar el programa en una versión vieja de linux, cree una maquina virtual con VBox he instalé Mandriva 2005.
Efectivamente el programa compilado en Debian 9 no funcionaba en Mandriva 2005, pero si lo compilaba en Mandriva 2005 si funcionaba en Debian 9.
Ahora sé que mi programa, sí lo podré usar perfectamente dentro de unos años.
Como curiosidad solo tuve un problema con el g++ del año 2005, resultó que el binario literal 0B00001111 no era admitido, debía ponerlo en hexadecimal 0x0F.
La apariencia es de los interfaces gráficos de Atari años 80, o eso me parece a mi.
Para dejar un solo archivo he incluido las font en el archivo fuente con font.h .

Saludos.
Juan Galaz


Bibliografía:

http://arduino.vom-kuhberg.de/index.php
http://www.seta43.netau.net/radiofm.html
http://www.seta43.netau.net/rards.html

martes, 10 de julio de 2018

Dron BAYANGTOYS X21 Fotos del interior Características

Página principal

Dron

BAYANGTOYS X21

Fotos del interior

Características y opinión


xsetaseta@gmail.com

El otro día tuve la necesidad de desmontar el dron X21 debido a un golpe, los arboles son mi principal enemigo, es el segundo golpe que le doy debido a los árboles.
El primer golpe tuve suerte y cayó sobre maleza y no tuvo el menor desperfecto, solo un par de rayones.
El segundo no tuve tanta suerte, cayo sobre asfalto, esta vez se rompió  la parte de carcasa de plástico que recubre a un motor.
Debido a esto tuve que desarmarlo para pegar las piezas mejor.
No hay mal que por bien no venga, podía ver las partes internas del X21.
Con la cámara empece hacer fotos y a tomar datos de todos los componentes.

Procesador        -  STM32F302
Placa 2.4GHz    -    2402E  y XN297L8W (módulo RF297RX-1)
GPS                - CIROCOMM  EPP1NM0 (conexión serie)
Giroscopio        -  MPU-6050A  (comunicación I2C)
Brújula            - módulo QYJ01-A  (comunicación I2C)
Control de motores - OBM3020



Imagen general del dron X21. Se pueden ampliar todas las imágenes con el menú ver imagen.

En la parte superior de la tapa del dron se encuentra el gps con su antena y la brújula.
Podéis comprobar en la foto, que la especie de antena que tiene el dron no sirve para nada, yo se la he quitado.
No entiendo la necesidad de colocar adornos que no sirven para nada.


En la placa principal se encuentra el microprocesador que lo controla todo es un STM32F302.
A su lado se encuentra el Giroscopio en el chip  MPU-6050A.
El módulo de RF se encuentra soldado a la placa mediante patillas.
También se puede ver todos las conexiones a los motores( control y potencia), y led de indicación.
La batería también se conecta aquí (B-,B+), pero soldada igual que los cables de potencia de los motores.
Como se puede ver en la foto la placa es la de un X16 con GPS, aunque le han cambiado el programa de tal manera que no funciona el mando del X16.
Existen dos conectores que proporcionan tensión a la cámara del X21 y a una cámara que se colocaba en el X16.

Detalle de la placa principal y de los chips.


Placa de potencia que maneja los motores, 1 placa para cada motor.

Un poco de historia de mi experiencia con el dron X21.
Lo pedía a la tienda GearBest , y me llego en un tiempo razonable.
Cuando abrí la caja me encontré que la cámara estaba suelta debido algún golpe en el transporte, hice fotos por lo que pudiera pasar.
Efectivamente, montado todo la cámara parecía muerta, no encendía ninguna luz.
Como yo no disponía de un móvil con WIFI 5.8 GHz que es el que utiliza la cámara para transmitir imágenes al móvil, pedí el móvil a un amigo para probarla, y resultó lo que me temía, estaba rota.
Reclamé y me devolvieron 30€, no es lo que vale la cámara (45€) pero menos es nada.
Mientras  me llegaba una cámara deportiva  EKEN H9 para colocarla en el dron, utilicé viejos móviles los cuales hacían buenas fotos colocados en el soporte de la cámara.
El dron he de decir que tiene potencia suficiente para elevar hasta cámaras digitales no muy grandes.
Antes de dada debemos comentar que los videos obtenidos tienen bastante vibración, debemos de pasarlos por un estabilizador digital.
El vuelo con GPS es bastante bueno, y el retorno a casa es perfecto , 1 m de error.
Lo primero que probé fue desconectar el mando para comprobar si retornaba automáticamente, y el retorno fue perfecto.
La distancia de control está entre 800 y 1000 m , y en cuanto altura está  bloqueado para no subir a mas de 120 m debido a la legislación. Mi intención es descubrir como desbloquear los 120 m de altura.
Tiene varios botones, punto de interés,  seguir al mando, vuelo sin cabeza, despegue automático, modo easy-3D.
También dispone de botón de foto y video, pero es solo es válido si conectas la cámara de X16.
Posteriormente he alimentado una mini cámara  FPV  TX02 al conector jack  donde se conecta la cámara X16( proporciona 5V), dándome muy buenos resultados.

Hay que indicar varias cosas:
El Wifi de la cámara es de 5.8GHz, la mayoría de los móviles son de 2.4GHz, no os extrañe si no podéis utilizar la cámara con vuestro móvil, deberían indicarlo mejor.
El tiempo de vuelo es raro que llegue a los 13 minutos , de los cuales 3 minutos serán cerca del lugar de despegue, debido a que automáticamente el dron no se aleja o vuelve, cuando la batería baja del 30%. Cuidado con los arboles, el dron no sabe que existen cuando se acerca automáticamente al bajar el voltaje de la batería( a mi me paso).
El vuelo con GPS  es perfecto, pero cuando se desactiva el GPS mediante el botón, el dron se vuelve inestable  y difícil de dejarlo quieto, debería ser mucho mas estable.
El orificio donde se mete la batería es demasiado justo, entran los cables un poco apelotonados.

Por lo general estoy contento con el X21, pero no es un juguete, tienes que tener cuidado con la hélices.
Podría ser mejor dron si se pudiera configurar el software de algún modo, el hardware está bien, y aguanta bien los golpes, lo he comprobado en mis propias carnes.


Un saludo.
Juan Galaz


martes, 5 de junio de 2018

Osciloscopio - Arduino - wxwidgets

Página principal

Osciloscopio
Arduino
wxwidgets

Hace tiempo había realizado un pequeño osciloscopio con un arduino. arosc.html
El programa que manejaba el osciloscopio lo había realizado con las librerías SDL, una librería especializada para juegos. Funciona bien y es multiplataforma, habiendo compilado en Windows y Linux.
Ahora como estaba en la época de la librería wxwidgets, era una buena ocasión de realizar el programa con esta librería.

Programa realizado con la librería wxwidgets.

Se ha mejorado bastantes cosas, una de ellas es la muestra real del voltaje en modo auto.
En el programa que hice bajo SDL la detección de la placa era automática, en este caso solo detecta los posibles puertos serie, nosotros debemos de seleccionar el adecuado. La rutina que me funcionaba en SDL no me funciona bajo wxwidgets, es curioso pero es así, no he querido profundizar de momento.
Otra cosa que me ha ocurrido es la diferencia entre versiones de librerías wxwidgets entre 2.8.12 y 3.1.1. Algunas rutinas funcionan y otras no, por lo que he tenido que retocar el código. Ahora funciona perfectamente en Linux y Windows (librería estatica o DLL), aunque veo que es algo más rápido bajo Linux.


PROGRAMA
Debian 9.4  y windows XP

Hasta pronto.
JUAN GALAZ


Bibliografía:
wxtutor.html
wxtem.html


viernes, 25 de mayo de 2018

Serial plotter con wxwidgets

Página principal
Serial plotter
wxwidgets

El programa Serial plotter es una utilidad que tiene arduino en versiones 1.6 . Sirve para crear una gráfica de dos canales analógicos que representan la tensión de los pines A0 y A1 del arduino.
Había realizado un programa parecido en Gambas (Visual Basic para Linux) ardupu.zip, y como estaba haciendo programas con la librería wxwidgets, decidí hacerlo con está librería.
La programación se realiza bajo Linux  Debian 9.4 y con la librería wxwidgets versión 3.1.1, esto lo especifico por su importancia.
La programación ha sido un tanto liosa y complicada.
En principio por los pocos ejemplos de dibujo en la librería de wxwidgets.
La segunda causa soy yo, no soy bueno en la programación en C++ , y en ciertas ocasiones pienso que hay tanta abstracción en la programación de objetos, que en algunos casos llega a convertirse en programación ofuscada.
El colocar los distintos botones y controles fue fácil, el problema fue el dibujado de lineas y control del repintado, me llevo bastante tiempo.
En Linux Debian 9.4 y bajo librería wxwidgets versión 3.1.1 el programa funciona perfectamente.
Pero cuando lo compile bajo Windows en las librerías
librería 2.8.12 y 3.1.1, compilaba bien, pero el funcionamiento era dispar.
Bajo la librería  2.8.12  simplemente no funcionaba se quedaba colgado.
Bajo la librería 3.1.1 el funcionamiento era extraño,  en principio funcionaba bien, pero cuando se interactuaba con él programa, se bloqueaba. Después de muchas pruebas el único modo de que funcionara era modificar la cantidad de datos que mandaba el arduino, de los 40 por segundo, debía rebajarse a los 10 por segundo.
Los datos que manda arduino por segundo son 40*9=360 Datos/Segundo , 360*10=3600 bps. Debería se suficiente la velocidad de 115200 del puerto serie.
Después de muchas vueltas buscando alguna solución, la encontré. Modificar los tiempos de espera entre bytes en la configuración serie. Esto se consigue cambiando los parámetros:
    time_out.ReadIntervalTimeout =     10;    //20;   
    time_out.ReadTotalTimeoutMultiplier = 1;    //2;
    time_out.ReadTotalTimeoutConstant = 2;    //50;

También existía diferencia entre las versiones 2.8.12 y la 3.1.1 en el repintado (onPaint) . Aunque en Linux funcionaba perfectamente en las dos versiones de las librería, en  Windows no pasaba lo mismo.
Para arreglar esto modifique:
#if YesWindows   
    dc.Blit(31,5,768,255, dcBuffer, 31, 5, wxCOPY, true);
#else
    dcPantalla->Blit(31,5,768,255, dcBuffer, 31, 5, wxCOPY, true);
#endif   

De esta forma funcionaba en los dos sistemas operativos.
Existe algún problema en el repintado, pero eso solo pasa si tenemos ventanas por encima de la nuestra.
También se podría realizar una rutina donde se busquen los puertos serie disponibles, es fácil, pero eso os lo dejo hacer a vosotros.


Programa funcionando.


Programa funcionando y con el código donde se muestra el programa que tiene que instalarse en el arduino.

PROGRAMA

Hasta pronto.
JUAN GALAZ


Bibliografía:
wxtutor.html
wxtem.html


viernes, 18 de mayo de 2018

Pequeño terminal serie , wxwidgets

Página principal

wxwidgets
Pequeño terminal serie


Había realizado varios programas que utilizaban el puerto serie, pero no había realizado un terminal serie.
En este programa realizo un pequeño terminal serie multiplataforma utilizando la librería wxwidgets.
Es sencillo sin muchas complicaciones, solo admite 8 bits.
He realizado la compilación bajo las versiones de las librería 2.8.12 y 3.11 , en formato estatico y con DLL.
Cuando se  compilan en dinamico se necesitan las DLL . wxtemdll.zip




PROGRAMA

Hasta pronto.
JUAN GALAZ



Bibliografía:
wxtutor.html
wxtem.html

sábado, 12 de mayo de 2018

Librería wxwidgets Crear programas multiplataforma

Página principal

Librería wxwidgets
Crear programas multiplataforma

Al crear un programa, lo primero que queremos es que sea utilizado por la mayor cantidad de gente. La plataforma que predomina es Windows, Linux y Mac solo es una pequeña parte de usuarios. Para el caso de querer que nuestro programa corra en las diferentes plataformas, debemos utilizar librerías multiplataforma, que con solo recompilar los archivos fuente, puedan ser utilizados los programas.
Para este caso vamos a utilizar la librería wxwidgets https://www.wxwidgets.org/.
En un anterior artículo wxtutor.html , había explicado como instalar y configurar wxWidgets en CodeBlocks bajo windows.
En este artículo he creado un monitor de temperatura externa, anteriormente lo había realizado en Gambas (VB para linux), pero bajo Windows no funciona. ard433.html
Para este programa he realizado varios makefiles para crear ejecutables para las diferentes versiones de librerías y modos, estaticas o DLL.
Al ser multiplataforma se recompila todo en Linux o Windows sin retocar ni una sola línea de código, salvo modificar el archivo define.h  y  poner:
    #define YesWindows 0
o
    #define YesWindows 1


Programa bajos Linux.


Programa bajos Windows.

Podemos observar los diferente ejecutables bajo Windows.
Los programas programa311.exe y programa1812.exe son pequeños, pero utilizan las DLL , que se tienen que colocar directorio system32 del directorio windows, o junto con cada uno de los ejecutables.
Los programas programa311s.exe y programa1812s.exe no necesitan las DLL, las llevan incorporadas en el propio programa. Son de mayor tamaño, pero quedan mejor en la distribución de un solo fichero para la utilización del programa. Se puede observar que dependiendo de la versión de la librería puede ser su tamaño más del doble.
Para reducir los programas ejecutables, se puede usar el programa upx.exe. Este programa comprime los ejecutables a la tercera parte. Se puede observar en los ficheros programa2812sz.exe y programa311sz.exe.

Para diferenciar entre programas, dll, y fuentes, los he distibuido en diferentes ficheros.

dll.zip

binarios.zip
fuentes.zip


Hasta pronto.
JUAN GALAZ

jueves, 10 de mayo de 2018

Configurando wxWidgets en CodeBlocks


Página principal

Configurando wxWidgets en CodeBlocks

xsetaseta@gmail.com


El otro día estuve viendo un magnífico video donde explicaba como configurar  wxWidgets en CodeBlocks bajo windows.
https://www.youtube.com/watch?v=LZacAgSBWa0
Son 26 minutos donde explica muy bien como configurar todo para poder compilar programas en windows.
En mi caso he utilizado:
Versiones de programas usadas
 wxWidgets-3.1.1  -  wxWidgets-2.8.12   -    CodeBlocks 17.12 -    tdm-gcc-5.1.0-3

He añadido el el Path de busqueda de windows el lugar de binarios del compilador.

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\TDM-GCC-32\bin

Entrando en la consola y cambiando de directorio.
cd c:\wxWidgets-3.1.1\build\msw\
o
cd c:\wxWidgets-2.8.12\build\msw\

Para realizar las compilaciones de las librerías he utilizado la opción del compilador -j4  (4 procesadores) , que utiliza todos los procesadores de la máquina, reduciéndose bastante el tiempo de compilación.  También en mi caso lo hago para una máquina de 32bits.

-Para compilar las librerías estáticas usar lo siguiente:
mingw32-make -j4 -f makefile.gcc  RUNTIME_LIBS=static USE_XRC=1 MONOLITHIC=1 SHARED=0 UNICODE=1 BUILD=release TARGET_CPU=X32 CXXFLAGS="-std=gnu++11"

-Para compilar las librerías dinámicas usar lo siguiente:
mingw32-make -j4 -f makefile.gcc  RUNTIME_LIBS=dynamic USE_XRC=1 MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=release TARGET_CPU=X32 CXXFLAGS="-std=gnu++11"

Esto suele tardar bastante, dependiendo del tipo de procesador que tenga vuestro ordenador.
He realizado la compilación para las dos versiones de las librerías  wxWidgets (3.1.1 y 2.8.12) , por lo cual el trabajo ha sido doble.

Para los que no se quieran complicar mucho he creado un fichero donde se encuentran compiladas las dos librerías (wxWidgets-3.1.1 - wxWidgets-2.8.12)  junto con el compilador   tdm-gcc.
Solo tendrás que descomprimirlo en C:\ y empezar a utilizarlo. Tamaño 129M.
https://drive.google.com/file/d/1idPA5NczyadfQ4gUThiLbyIYrYJEkj05/view?usp=sharing  


Para que el  CodeBlocks no de errores en la compilación por falta de librerías he tenido que cambiar varias cosas en el menú del proyecto en Opciones de construcción.
Si compilamos programas en estático, cambiar   C:\wxWidgets-3.1.1\lib\gcc_dll  por   C:\wxWidgets-3.1.1\lib\gcc_lib






Listado de la consola de construcción
-------------- Build: Release in borrawx311 (compiler: GNU GCC Compiler)---------------
mingw32-g++.exe -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DwxUSE_UNICODE -Wall -O2 -IC:\wxWidgets-3.1.1\include -IC:\wxWidgets-3.1.1\lib\gcc_dll\mswu -c "C:\Documents and Settings\Administrador\Mis documentos\borrawx311\borrawx311App.cpp" -o obj\Release\borrawx311App.o

mingw32-g++.exe -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DwxUSE_UNICODE -Wall -O2 -IC:\wxWidgets-3.1.1\include -IC:\wxWidgets-3.1.1\lib\gcc_dll\mswu -c "C:\Documents and Settings\Administrador\Mis documentos\borrawx311\borrawx311Main.cpp" -o obj\Release\borrawx311Main.o
windres.exe -IC:\wxWidgets-3.1.1\include -IC:\wxWidgets-3.1.1\lib\gcc_dll\mswu  -J rc -O coff -i C:\DOCUME~1\ADMINI~1\MISDOC~1\BORRAW~1\resource.rc -o obj\Release\resource.res

mingw32-g++.exe -LC:\wxWidgets-3.1.1\lib\gcc_dll -o bin\Release\borrawx311.exe obj\Release\borrawx311App.o obj\Release\borrawx311Main.o  obj\Release\resource.res -s -mthreads  -lwxmsw31u -lwxpng -lwxjpeg -lwxtiff -lwxzlib -lshlwapi -lversion -loleacc -lUxTheme -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lcomctl32 -lwsock32 -lodbc32 -lshlwapi -lversion -mwindows

Output file is bin\Release\borrawx311.exe with size 774.50 KB
Process terminated with status 0 (0 minute(s), 8 second(s))
0 error(s), 0 warning(s) (0 minute(s), 8 second(s))


El tamaño de los ejecutables resultan ser mas del doble en las dos en las diferentes versiones de las librerías.



He realizado un video de un programa realizado con  CodeBlocks

https://youtu.be/E6WA2n_Uib0

Para una mejor visión de todas las opciones de compilación, muestro el fichero resource.rc.
resource.rc
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
    <FileVersion major="1" minor="6" />
    <Project>
        <Option title="borrawx311" />
        <Option pch_mode="2" />
        <Option compiler="gcc" />
        <Build>
            <Target title="Release">
                <Option output="bin/Release/borrawx311" prefix_auto="1" extension_auto="1" />
                <Option object_output="obj/Release/" />
                <Option type="0" />
                <Option compiler="gcc" />
                <Option projectLinkerOptionsRelation="2" />
                <Compiler>
                    <Add option="-O2" />
                    <Add directory="C:/wxWidgets-3.1.1/lib/gcc_dll/mswu" />
                </Compiler>
                <ResourceCompiler>
                    <Add directory="C:/wxWidgets-3.1.1/lib/gcc_dll/mswu" />
                </ResourceCompiler>
                <Linker>
                    <Add option="-s" />
                    <Add library="libwxmsw31u.a" />
                    <Add library="libwxpng.a" />
                    <Add library="libwxjpeg.a" />
                    <Add library="libwxtiff.a" />
                    <Add library="libwxzlib.a" />
                    <Add library="libshlwapi" />
                    <Add library="libversion" />
                    <Add library="liboleacc" />
                    <Add library="libUxTheme" />
                    <Add directory="C:/wxWidgets-3.1.1/lib/gcc_dll" />
                </Linker>
            </Target>
        </Build>
        <Compiler>
            <Add option="-pipe" />
            <Add option="-mthreads" />
            <Add option="-D__GNUWIN32__" />
            <Add option="-D__WXMSW__" />
            <Add option="-DwxUSE_UNICODE" />
            <Add option="-Wall" />
            <Add directory="C:/wxWidgets-3.1.1/include" />
        </Compiler>
        <ResourceCompiler>
            <Add directory="C:/wxWidgets-3.1.1/include" />
        </ResourceCompiler>
        <Linker>
            <Add option="-mthreads" />
            <Add library="libkernel32.a" />
            <Add library="libuser32.a" />
            <Add library="libgdi32.a" />
            <Add library="libwinspool.a" />
            <Add library="libcomdlg32.a" />
            <Add library="libadvapi32.a" />
            <Add library="libshell32.a" />
            <Add library="libole32.a" />
            <Add library="liboleaut32.a" />
            <Add library="libuuid.a" />
            <Add library="libcomctl32.a" />
            <Add library="libwsock32.a" />
            <Add library="libodbc32.a" />
            <Add library="libshlwapi.a" />
            <Add library="libversion.a" />
        </Linker>
        <Unit filename="borrawx311App.cpp" />
        <Unit filename="borrawx311App.h" />
        <Unit filename="borrawx311Main.cpp" />
        <Unit filename="borrawx311Main.h" />
        <Unit filename="resource.rc">
            <Option compilerVar="WINDRES" />
        </Unit>
        <Unit filename="wxsmith/borrawx311frame.wxs" />
        <Extensions>
            <code_completion />
            <envvars />
            <debugger />
            <lib_finder disable_auto="1" />
            <wxsmith version="1">
                <gui name="wxWidgets" src="borrawx311App.cpp" main="borrawx311Frame" init_handlers="necessary" language="CPP" />
                <resources>
                    <wxFrame wxs="wxsmith/borrawx311frame.wxs" src="borrawx311Main.cpp" hdr="borrawx311Main.h" fwddecl="0" i18n="1" name="borrawx311Frame" language="CPP" />
                </resources>
            </wxsmith>
        </Extensions>
    </Project>
</CodeBlocks_project_file>



Hasta pronto.
JUAN GALAZ

Bibliografía:
https://www.youtube.com/watch?v=LZacAgSBWa0