Ejemplos de programación en B4X

Tomada la debida nota el respecto del ESP32, aquí con el envió en el mercado local sale poco menos U$A10( 6 de el ESP y 3 o 4 el envio) y como te adelantaron, en ese momento las compras internacionales, no son de uso corriente/masivo por diferentes motivos.

Las referencias y situaciones en diferentes paises son difíciles de universalizar y cada entorno es todo un "mundo/universo" con sus particularidades.

Saludos.
 
Si, de hecho también trabaje con MQTT, con el broker EMQX, usando el esp8266 como módulo WiFi + micro AVR, pero no usando el ESP32. Mi idea es aprender a usar bien el esp32 y más adelante poder diseñar PCB solo con el micro, mas no con toda la placa.
Creo que en el foro no hay un tutorial sobre ello, en YouTube si lo hay pero no explotan todo lo bueno que contiene este micro de 32 bits, hasta donde sé es de doble núcleo...
 
OFF-TOPIC

Si, y tiene "me encanta" de mi pate cuanto lo publicaste pero no tube demasiado tiempo para poder estudiarlo en profundidad, como se merece.

Tengo que trabajar en lo que me genera ingresos y en los ratos libres y si hay tiempo excedente me dedico a la parte de programación entre otras cosas.

A esta altura de mi vida, cerca del retiro, es lo mas rápido que pienso acelerar! :)
 

D@rkbytes

Moderador
Les comparto el modelo y Footprint para el ESP-WROOM-32 base board.
Lo realicé para Proteus 8.12 y seguramente le será de utilidad a los entusiastas de los diseños propios.

Resulta que me decidí por comprar solo los base board por lote y desde este crear mis diseños.
Con esto se consigue economía y reducción de espacio en los diseños.

Nota: Para poder usarlo en sus proyectos, primero deben abrir el proyecto y deberán crear el modelo y librería en base a los diseños creados.
Otra forma de hacerlo es, copiar el modelo y el footprint a sus diseños.
 

Adjuntos

  • ESP-WROOM-32.png
    ESP-WROOM-32.png
    141.2 KB · Visitas: 7
  • ESP-WROOM-32.rar
    14.8 KB · Visitas: 9

Scooter

Cascarrabias crónico
kiCAD tiene esa huella desde hace tiempo.
Efectivamente esos módulos son fáciles de usar en diseños de hobbistas, no compensa pagar el triple porque le pongan unos pines.
 

D@rkbytes

Moderador
Sencillo ejemplo de conexión a la red Wi-Fi + LED Blink + Estado digital de un Pin

Sé que esto es muy básico pero lo dejo por aquí porque para otros puede no ser así.

El módulo usado es un ESP-12E/F (Con un chip ESP8266MOD)
Este fue ensamblado por mí comprando las cosas por separado. (Solo coloqué "el chip")
Compré dos tarjetas base (sin el chip) y un lote de 30 ESP-12E para diseños propios sin la tarjeta base.
Esto fue con la intención de poder hacer pruebas previas.

La tarjeta base (Módulo) es así:
Tarjeta Base ESP12-E.jpg
Y el chip es así:
ESP-12E.jpg

Bueno, el chip viene dentro de un PCB con blindaje y ya con la memoria SPI Flash. (4MB)
Sin embargo, el chip QFN-32 también se puede conseguir, pero en mi caso los prefiero comprar y aplicar así a mis diseños.
La diferencia de costos es inapreciable al igual que el tamaño ocupado. ¿Y el blindaje? Ah, eso sí es importante, por eso es mejor así. ;)

El Pinout del módulo es el siguiente:
ESP-12E MOD.jpg
Pines disponibles:
Pines disponibles ESP-12E-F.jpg
Los marcados en verde y con "OK" son los pines que básicamente podremos usar.
Nota: En la tarjeta base no se disponen los pines GPIO11, GPIO7, GPIO9, GPIO10, GPIO8 y GPIO6, referentes a SDCMD, SDD0, SDD2, SDD3, SDD1 y SDCLK, correspondientemente.

Como siempre, espero que esta información sea de utilidad.
 

Adjuntos

  • ESP-12E Wi-Fi Test.rar
    1.2 KB · Visitas: 2

D@rkbytes

Moderador
Efectivamente esos módulos son fáciles de usar en diseños de hobbistas
El solo hecho de tratarse de un microcontrolador de 32 bits con Wi-Fi y Bluetooth incorporados, ya no solo es para aficionados, sino para realmente expertos en la materia.
Hay que tener en cuenta que no es un microcontrolador común. Se pueden hacer con él cosas que no se logran con otro.
Es obvio que se puede jugar con esto, pero en mi caso he realizado sistemas inteligentes sumamente complejos que ya van más allá de un simple entretenimiento.
Y hasta me estoy quedando corto, ya que el ESP32-WROOM-32 cuenta con sensores y periféricos nativos muy interesantes.
 

D@rkbytes

Moderador
Saludos.
Realicé un aplicación para programar los microcontroladores ESP-12X/ESP8266 sin la necesidad del IDE.
Esto es porque cuando ya tienes tus tarjetas armadas, requerirás de programación masiva, y programar desde el IDE no es buena opción.
Así que me dí a la tarea de crear una aplicación con la que se puedan programar estos dispositivos de forma fácil y rápida.

Esto apenas va en pañales, sé que le falta mucho aún, y espero poderla mejorar.
Por ahora la opción para borrar la memoria Flash requiere tener instalado Python 3.9 o el más actual con la herramienta esptool.py
Si no se requiere borrar la memoria Flash, esto se puede omitir y el programa podrá programar los chips ESP-12X/ESP8266

La aplicación va quedando así por ahora:
ESP Updater v1.0.jpg
Funciona bien pero pienso que puede mejorar.

Como siempre, espero que sea de utilidad.
Cualquier comentario o duda, trataré de responderlo en la brevedad posible.
 

Adjuntos

  • ESP Updater.rar
    45.6 KB · Visitas: 3

D@rkbytes

Moderador
Sencillo pero eficiente programa Anti Copia para nuestros proyectos con ESP32.

Proteger un ESP32 por medio del Secure Boot y claves digitales es un proceso complicado, así que realicé un programa que en realidad es muy sencillo pero bastante seguro y confiable.
Aplicando esto a nuestro programa, ya no se podrá ejecutar en otro chip si es que realizan una copia de la memoria SPI Flash.

Se basa en que cada chip o SOC tiene grabada de fábrica una dirección MAC que no se puede borrar ni sobreescribir.
Viendo esta característica, la aproveché para realizar este método de protección anti copia.

Una de las peores cosas que un programador puede hacer es, guardar claves como cadenas.
Las cadenas son visibles con un editor hexadecimal, así que esto de ninguna forma es conveniente.
Por ejemplo:
Código:
Private Const MyUniqueID As String = "083AF28E3410"

Buscando un poco podremos encontrar la cadena mágica.
UniqueID_Find.jpg
Como la MAC o ID del chip siempre serán 6 bytes, se pueden reemplazar sin problemas.
Y aunque esto sea posible, la imagen generada (compilada) también cuenta con verificación.
Así que tampoco será fácil engañar a esptool durante el proceso de grabado.
Sin embargo, y para reforzar aún más la seguridad, opté por guardar el identificador del chip en un arreglo del tipo byte.
Código:
    Dim MyID(6) As Byte
    
    MyID(0) = 0x08
    MyID(1) = 0x3A
    MyID(2) = 0xF2
    MyID(3) = 0x8E
    MyID(4) = 0x34
    MyID(5) = 0x10
Con esto ya no se podrá encontrar con un editor hexadecimal nada relacionado al identificador.
Por más que se busque no se encontrará, además de que no se sabrá qué buscar, ya que cada chip tiene una MAC diferente.

El ejemplo que adjunto únicamente funciona con los ESP32, para los ESP01, ESP12, etc, basados en el ESP8266, se tendrá que usar otro método usando InLine C y con la librería UniqueID de Arduino.
Como esto ya es otra historia, lo dejaré pendiente para más tarde, o en lo que me llega la inspiración.

Mientras tanto, adjunto el ejemplo y la librería usada para este propósito.
 

Adjuntos

  • ESP32 UniqueID.rar
    1.4 KB · Visitas: 3
  • rESP32extras.zip
    5.9 KB · Visitas: 3
A ver si entendi.

1º- Hay que leer la MAC del chip antes de cargarle el programa
2º- En el programa escribir el identificador del chip en el arreglo
3º- Ahora grabar el programa y recién estará disponible para trabajar

Es asi?
 

D@rkbytes

Moderador
A ver si entendi.

1º- Hay que leer la MAC del chip antes de cargarle el programa
2º- En el programa escribir el identificador del chip en el arreglo
3º- Ahora grabar el programa y recién estará disponible para trabajar

Es asi?
Sí, así es. Aunque, el programa siempre se carga, pero al menos una vez servirá para obtener la MAC del chip a usar.
Esto se tiene que hacer con cada chip, pero a final de cuentas, será inclonable.

El programa cuenta con una función que retorna la MAC del chip usado.
MAC.jpg
Esta debe ser copiada y una vez obtenida se coloca byte por byte en el arreglo.
Cada byte serán dos dígitos en hexadecimal.
Por lo tanto, separando se obtiene: 0x08, 0x3A, 0xF2, 0x8E, 0x34, 0x10
Posteriormente y obviamente por seguridad, se comenta el procedimiento que nos da la MAC.
Importante.jpg
El procedimiento está comentado dentro del programa.
 

Scooter

Cascarrabias crónico
Muy buena idea, muchas gracias por el aporte.
También puedes hacer encriptaciones simples como invertir algunos bits que solo tú sabes cuáles son, girar el byte o intercalar porquería entre los seis bytes validos.
Todo eso es bastante de baja seguridad pero ya dificulta algo la búsqueda de la cadena de la MAC.
Otra cosa que se puede hacer es que el programa funcione normalmente con la MAC mala pero empiece a fallar "aleatoriamente" con el paso del tiempo por tener la MAC incorrecta.
O que "queme" una dirección de la EEPROM o la FLASH a base de escribir, no solo fallará, además destruyes esa unidad.
Si, lo reconozco, soy de mente retorcida.
 

D@rkbytes

Moderador
El ejemplo que adjunto únicamente funciona con los ESP32, para los ESP01, ESP12, etc, basados en el ESP8266, se tendrá que usar otro método usando InLine C y con la librería UniqueID de Arduino.
Como esto ya es otra historia, lo dejaré pendiente para más tarde, o en lo que me llega la inspiración.
Aquí el ejemplo para los ESP8266
Me decidí por usar la librería ESP8266WiFi porque la librería UniqueID no retorna la MAC completa.
Supongo que ya la deben tener instalada, y por si no, la adjunto.

No funcionó con los ESP-12E, no se ejecuta el programa. Seguiré buscando la solución.
 

Adjuntos

  • ESP8266 UniqueID.zip
    1.7 KB · Visitas: 4
  • ESP8266wifi.zip
    14.2 KB · Visitas: 3
Pregunto lo siguiente:

¿Como esta de eficiente el codigo resultante?

Es decir, el .HEX resultante en este ambiente B4X. ¿Que tan amigable es a la hora de escribir programas, digamos, mas avanzados con respecto a escribir "lo mismo" bajo el entorno C++ sin comprometer la capacidad natural del microcontrolador? Me refiero a un Atmega 328, esp8266 o esp32.

Saludos y gracias por compartir sus experiencias.
 
Última edición:

D@rkbytes

Moderador
A ver, la eficiencia del código resultante no depende del compilador, sino de quien programa.
Una cosa es el código y otra cosa es el ejecutable, ambos son cosas muy diferentes.

B4R es un entorno de programación basado en lenguaje Basic, pero al estilo de VB.NET
Por lo tanto, programar en este entorno es como programar con objetos, sub procedimientos y funciones.
Nada qué ver con Arduino, esto es algo más innovador y por supuesto, muy superior.
Pero como ya se ha mencionado, requiere el entorno de Arduino.
Al ser un entorno de programación de alto nivel, obviamente consume muchos recursos, la paga es justa y no en precio porque el entorno es gratuito.
Sin embargo, no dista mucho de lo que hace Arduino, ya que finalmente se compila con lo que se debe compilar, eso sí, incluyendo sus librerías.

No sé si alguna vez has programado una aplicación, ya no digo un microcontrolador.
O sea, algo para Win32, x64 o Linux, me refiero a algo basado en objetos, no solo un loop y de ahí invocar procedimientos.
Bueno, pues este entorno es como programar aplicaciones de este tipo pero con un microcontrolador.
¿Por qué se puede? Porque usa RTOS y esto puede generar procesos basados en temporizadores que nos permiten programar de esta forma.
Este entorno está lleno de librerías básicas y otras que al igual que Arduino se van instalando.
En teoría, cuando se sabe del Basic, este entorno es lo mejor que le pudo pasar a los microcontroladores.
Y no, el Basic no es un lenguaje obsoleto, tan no lo es que, Microsoft aún sigue lanzando nuevas versiones .NET de VB.

Hago notar una vez más que el archivo . hex o .bin generado, es tan bueno como se le haya programado.
Y que esto depende mucho de quién lo haya escrito.
 
A ver, la eficiencia del código resultante no depende del compilador, sino de quien programa.
Una cosa es el código y otra cosa es el ejecutable, ambos son cosas muy diferentes.
Creo que no exprese bien mi cuestionamiento.

Cuando se utiliza como recurso de programacion un lenguaje de alto nivel para facilitar el desarrollo de una aplicacion, estas facilidades, despues del compilador se traducen en un costo que se ve reflejado en el tamaño del codigo maquina, uso de memoria, etc en el ejecutor (El Microcontrolador en este caso).


Al ser un entorno de programación de alto nivel, obviamente consume muchos recursos, la paga es justa y no en precio
Ya lo dejaste claro :sneaky:

Saludos.
 
Última edición:

Scooter

Cascarrabias crónico
Cuando se utiliza como recurso de programacion un lenguaje de alto nivel para facilitar el desarrollo de una aplicacion, estas facilidades, despues del compilador se traducen en un costo que se ve reflejado en el tamaño del codigo maquina, uso de memoria, etc en el ejecutor (El Microcontrolador en este caso).
¿A cuanto cobras la hora y a cuanto va el MIP de microcontrolador, cuanto vale la semana o el mes de retraso en optimizar el código?
Si va a hacer una serie de un millón de unidades probablemente compense usar una cpu barata, si vas a hacer tres no compensa.
 

Scooter

Cascarrabias crónico
... me quedé muy corto, se me olvidaba la madre del cordero:
¿Cuanto cuesta mantener un código en digamos ensamblador?
Si detectas un bug, ¿Cuanto tardas en arreglarlo?
Si te piden una funcionalidad, ¿cuanto tardas en implementarlo en aquella CPU tan barata que usaste?

Creo que no compensa en ningún caso irse al baremetal salvo por diversión.
 

D@rkbytes

Moderador
También hay que tener en cuenta que cada día se fabrican microcontroladores con mayor memoria.
En el caso de los ESPXXXX vienen con una memoria flash de 4 Mb, si eso no basta, se puede cambiar hasta 16 Mb.
Eso ya es extremo, pero se puede si falta. Cosa que hasta en mis aplicaciones más complejas no he requerido y con la de 4 Mb me sigue quedando de sobra.
Sí es de preocuparse, digamos con un ATmega8, esos si van cortos, pero un ATmega328 con 32 Kb ya nos permite crear programas complejos sin preocupación de espacio.
Actualmente estoy usando los LGT8F328P, son un clon pero con mayor frecuencia de operación, (32 MHz y oscilador interno)
Más baratos, y con más periféricos.
Sin embargo, programar con los ESP32, es sin duda alguna, otro nivel.
 
Arriba