Mostrando entradas con la etiqueta wxWidgets. Mostrar todas las entradas
Mostrando entradas con la etiqueta wxWidgets. Mostrar todas las entradas

miércoles, 18 de marzo de 2020

Arduino Control salidas. wxwidgets - Portable - Linux _ Windows

Página principal
Arduino
Control salidas

wxwidgets
Portable - Linux _ Windows


En un montaje anterior arseta.html había realizado un controlador de salidas mediante una placa Arduino.
Estaba realizado en Gambas (VB Linux), en esta ocasión lo realizo en wxwidgets, tanto en Linux como en Windows.
Además aprovechando la oportunidad he realizado una nueva versión de Linux,  versión portable.
Esta versión funciona tanto en 32bits como en la versión 64bits.

Circuito.


Funcionando en Windows 10


Funcionando en Linux ,versión portable.

En algunos Windows, el puerto virtual Serie lo coloca muy alto, me encontrado en algunas ocasiones que estaba en Com23, el programa solo mira si existe entre el Com1 y Com5. Si es vuestro caso deberéis cambiar el lugar  para que este en el rango buscado. Se hace como administrador y en configuración de los puertos serie.
En la versión Windows la detección de los puertos se hace un poco lenta, debéis esperar algo (3-4 segundos).


PROGRAMA LINUX -WINDOWS

Saludos.
Juan Galaz



Bibliografía:

Arduino_Uno 1.0.1  programado por Rolfdahl-skogstade

miércoles, 11 de marzo de 2020

Portables - wxwidgets - LINUX


Portables


wxwidgets

LINUX


Como suelo programar con wxwidgets alguna vez, me he encontrado que debido a las múltiples distribuciones y entornos de 32bits o 64bits, el poder compilar un programa y poderlo ejecutar en diferentes entornos, se hace bastante difícil.
Para salvar este problema podemos hacer uso de las aplicaciones portables, que en teoría funcionarán en todas las distribuciones.
En un artículo anterior había realizado un portable para gambas porta.html , este artículo es una continuación.

Para este artículo he tomado como ejemplo mi anterior montaje de detección pulso max30.html , en la versión con wxwidgets.
En la compilación normal el fichero binario ocupa 190Kbytes , un tamaño bastante reducido.
El problema es que está compilado en Debian9 y en 32bits. Este binario no se puede ejecutar en entornos de 64bits, además de no poderse ejecutar en versiones donde no esté instaladas las librerías
wxwidgets v3.
Lo normal es que el usuario no se preocupe en qué entorno se esté ejecutando el binario, lo lo primero que percibe es frustración al no funcionar.

Existe un método para crear un entorno donde se encuentren todas las librerías que necesite la aplicación, utilizar el programa cde.

Antes de nada he retocado el Makefile de compilación de nuestro binario.
La versión
wxwidgets v3 utiliza librerías que nuestro programa no utiliza, pero que de serie la incluye en la compilación.
Cambiar la línea donde aparece
CONFIWX y cambiarlo según lo siguiente:

#CONFIWX =  `wx-config --cppflags --libs`
CONFIWX =  -I/usr/lib/i386-linux-gnu/wx/include/gtk2-unicode-3.0 -I/usr/include/wx-3.0 -D_FILE_OFFSET_BITS=64 -DWXUSINGDLL -D__WXGTK__ -L/usr/lib/i386-linux-gnu -pthread   -lwx_gtk2u_xrc-3.0  -lwx_gtk2u_qa-3.0 -lwx_gtk2u_adv-3.0 -lwx_gtk2u_core-3.0 -lwx_baseu_xml-3.0 -lwx_baseu_net-3.0 -lwx_baseu-3.0


De esta forma el binario será del mismo tamaño, pero quitaremos las librerías no necesarias -lwx_gtk2u_webview-3.0   -lwx_gtk2u_html-3.0  , y reduciremos en 100Megas el entorno necesario.

cde
El verdadero protagonista de este artículo es  cde_2011-08-15_32bit ,
    http://www.pgbovine.net/cde.html
este pequeño programa de 900 Kbytes crea un directorio donde recrea todo el entorno de librerías y demás programas que utiliza el programa que queremos que sea portable.
Colocamos el programa  cde_2011-08-15_32bit en el directorio /home/arduino/bin/pulsowxALL3  junto con  el programa binario, en este caso programaLinux.
Entramos en una consola y tecleamos:

/home/arduino/bin/pulsowxALL3
./cde_2011-08-15_32bit     /home/arduino/bin/pulsowxALL3/programaLinux


Después  de ejecutar el programa y cerrarlo, veremos que nos ha creado un directorio llamado cde-package , lo cambiamos de nombre con la orden:  mv cde-package  wxpulso
En el directorio wxpulso  se habrá creado un entorno donde se encuentra todas las librerías y ficheros que ha necesitado el programa.
El tamaño del directorio  es de 50M , aunque parezca mucho, si no hubiéramos retocado el Makefile el tamaño sería de 130M.
Podemos ejecutar  el fichero  wxpulso/cde-root/home/arduino/bin/pulsowxALL3/programaLinux.cde
en cualquier entorno y distribución, funcionando perfectamente.

Aquí podríamos terminar el artículo, pero se puede mejorar aún mas.

makeself
Si no se necesita acceder a ningún fichero después de ejecutar el programa (se destruye el entorno al terminar de ejecutar el programa) se puede compactar y distribuirlo en un fichero.
Para esto utilizaremos el programa makeself , que compacta un ejecutable con su entorno.
Creamos un fichero llamado programa en el directorio wxpulso con lo siguiente:

#!/bin/sh
cd
cde-root/home/arduino/bin/pulsowxALL3
./
programaLinux.cde

Damos permiso de ejecución con chmod ugo+x  programa
Ahora podemos probar el programa ejecutando el fichero programa.

Las opciones que se deben usar para utilizar el programa makeself  es:

makeself directorio nombrePrograma_a_crear "ETIQUETA" ejecutable

En nuestro, estando en el directorio pulsowxALL3 caso sería:

makeself wxpulso pulsowx.run "PULSOWX" ./programa

Si todo fue bien nos habrá creado un fichero ejecutable llamado pulsowx.run con un tamaño de 20M.
El fichero pulsowx.run al ejecutarse se auto-descomprime en el directorio /tmp del sistema , donde ejecutara el fichero programa.
Podemos comprimir el fichero algo mas con la orden:
    makeself --bzip2 wxpulso pulsowx.run "PULSOWX" ./programa            18M
o
    makeself --xz  wxpulso pulsowx.run "PULSOWX" ./programa                14,5M

Pero debemos entender que debemos tener el descompresor instalado  en el sistema.


Lo normal es que no se utilice todas las funciones de la biblioteca 
wxwidgets 3.x en nuestro programa, por lo cual podemos compilarlo con la versión de wxwidgets 2.8 , bastante mas liviana.
Para este caso he creado una máquina virtual con VBOX instalando Debian7 , la cual lleva de serie la versión de
wxwidgets 2.8 .
Después de realizar todos los procesos anteriores, podemos conseguir un fichero ejecutable de 9M.
Este fichero ejecutable se puede utilizar en cualquier entorno (32bit o 64bits) y cualquier distribución.

Lo que habíamos intentado lo hemos conseguido, distribuir programas en linux que se pueden ejecutar en cualquier entorno.
Si nuestro programa no accede a ningún fichero local, podemos comprimir con makeself.
Si nuestro programa tiene que acceder a ficheros locales nos tenemos que quedar en el paso donde creamos un entorno con cde.

Como curiosidad, también recree con cde un entorno de compilación para
wxwidgets 2.8 . Este entorno lo puedo ejecutar en cualquier distribución, sin necesidad de utilizar VBOX.

Programa compilado en Debian7 32bits y ejecutado en openSuse 64bits.
Librerías
wxwidgets 2.8

PROGRAMA


Saludos.
Juan Galaz

Bibliografía:
     porta.html

sábado, 15 de febrero de 2020

ARDUINO-MAX30105-Opciones en tiempo real


ARDUINO

MAX30105

Opciones en tiempo real

Gambas(VB-Linux) - Visual Basic 6 - wxwidgets


Después de realizar el montaje con el  módulo MAX30105, utilicé Gambas (VB para Linux).
Al tener que hacer pruebas y pruebas, decidí crear otro programa que me permitiera cambiar muchas de las configuraciones del MAX30105 en tiempo real.
También este programa está realizado en Gambas -  Linux bajo la distribución Debian 9. Como he dicho en muchas ocasiones el que quiera lo puede traspasar a Visual Basic con poco trabajo.

Programa con muchas de las opciones de la librería SparkFun_MAX3010x.



VIDEO

PROGRAMA




Un amigo me dijo que estaba bien hacer el programa en Gambas, pero también me dijo que la mayoría tiene Windows, y era una pena no hacerlo para Windows.
Como yo soy muy bien mandado, me puse manos a la obra, y me lo programé para Windows con Visual Basic 6, es lo que tengo a mano.
Lo que si he notado es que se programa mucho mejor en Gambas que en VB6, autocompletado, busca automática de variables, etc... Me imagino que en versiones posteriores lo hayan mejorado.


Programa en Visual Basic.

PROGRAMA_VB6

  







Programa en Linux y Windows, ¿alguien distingue cual es cual?

Una vez puesto a programar, como todos los años, creo un programa multiplataforma (Linux y Windows).
Que mejor que realizar el  visualizador  de pulso con la librería wxwidgets.
Está programado utilizando la versión 3 de la librería
wxwidgets.
Primero se programa en Linux sobre Debian 9 , y luego se traslada a Windows.
Para que se compile en una plataforma u otra solo debemos modificar el archivo define.h  y  poner:
    #define YesWindows 0
o
    #define YesWindows 1
El que quiera ver mas programas realizados con esta librería que visite mi página wxseta.html.
En el fichero comprimido se incorporan la librerías *.dll necesarias para las versiones compiladas en dinámico.
La versiones compiladas en estático programa311s.exe no necesitan ninguna dll , pero su tamaño es mayor.
En Linux se necesitan librerías wx, las necesarias son:
    libwxbase3
    libwxgtk-webview3
    libwxgtk3
Estas librerías suelen estar instaladas, pero si no es así se instalan desde los repositorios.

PROGRAMA WX


Saludos.
Juan Galaz

Bibliografía:
https://github.com/sparkfun/SparkFun_MAX3010x_Sensor_Library
https://desensores.com/sensores-arduino/tipos-de-sensores-arduino/sensor-de-frecuencia-cardiaca-max30102-para-arduino/
https://create.arduino.cc/projecthub/SurtrTech/measure-heart-rate-and-spo2-with-max30102-c2b4d8?ref=tag&ref_id=health&offset=2
https://polaridad.es/max30100-sensor-latido-corazon-oximetro-pulso-i2c-wearable-salud/

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, 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

jueves, 9 de junio de 2016

wxMunicipios wxwidgets

09/06/2016 - wxMunicipios
Había realizado un programa para buscar los municipios, en primer lugar lo había realizado para Android, luego lo hice en Gambas (vb linux) , y como hacia tiempo que no había realizado nada en wxwidgets, y antes de que se me olvidase, me puse manos a la obra.
Lo que me satisface más, es el poder compilar para las dos plataformas, Linux o Windows, con solo cambiar la directiva YesWindows 0 por #define YesWindows 1 en el fichero define.h  .

Programas de linux y windows

Windows
 


















Linux

lunes, 7 de julio de 2014

Reloj con wxwidgets.

Reloj con wxwidgets.
Un simple reloj.


Programas ejecutables y fuentes.


Un saludo.
Juan Galaz

Calculadora con wxwidgets.

Calculadora con wxwidgets.
El título lo dice todo, no hay mas que decir. Es simple y sencilla, nada del otro mundo, para hacer practicas con la librería wxwidgets.
Existen 3 modelos , con
Code::Blocks para windows y linux, y uno hecho mediante makefile para ambas plataformas.



Programas ejecutables y fuentes.
DLL necesarias para Windows.


Un saludo.
Juan Galaz

lunes, 23 de junio de 2014

Interface con librería wxWidgets para monitor temperatura/humedad

En mi anterior circuito

http://seta43.blogspot.com.es/2014/06/arduino-emisor-temperaturahumedad.html

había realizado el programa de  monitorización en lenguaje Basic mediante el entorno de programación Gambas. Pero claro no todo el mundo tiene Linux para instalar gambas, la vida real es así. Buscando una librería que fuese multiplataforma, elegí la librería wxWidgets. Está bastante bien documentada, en ingles claro, y funciona bastante bien.

En mi primera incursión en la librería wxWidgets , he realizado el monitor para el circuito.
Ha sido duro la programación, pero mereció la pena.
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 Linux-Windows - Librería wxWidgets 

 Linux


 Windows



Un saludo.
Juan Galaz