visual studio y libreria

Hola, después de un largo tiempo inactivo me vuelvo a este mundo de Arduino. Estoy recuperando algún antiguo proyecto que desarrollé en su día con el IDE de Arduino. Ahora me gustaria meterme con Visual Studio, pero no se como enlazar alguna de las librerías que en su día usé.
He probado con vcpkg pero la mía no la encuentra. Yo tengo los ficheros de la librería, pero no sé como enlazarla en el VS.... alguna idea o documento al que echar mano?

Gracias !

Buenas:

¿En qué consiste el proyecto?

¿Librerías para Visual Studio o para Arduino o para las dos?

En las documentaciones normalmente indica como instalarlas y usarlas. A parte de ver la versión a usar también, por tema de compatibilidad.

Saludos.

Hola, gracias por la respuesta !

El proyecto es lo de menos, en este caso se lee un valor pasado por un fichero php para encender o no un led. En concreto lo uso para saber si la puerta de un garaje está abierta o no... :slight_smile: Un Arduino le pasa a la BD el estado de la puerta, y otra placa lee el estado y prende el led o no. Adjunto el código de la que prende el led mas abajo a modo de ejemplo solo. En su día era un código que funcionaba, y funciona en los que está cargado.
Mi duda es al desarrollar con el VS, enlazar las librerías.
Siguiendo el tema, he visto un archivo en la carpeta del proyecto que crea VS con nombre C_cpp_properties.json, en él hay el apartado Includepath. Si le pongo ahí la referencia física de la librería ya la encuentra y compila. No se si habrá una manera mas simple...

Ahora empero, me aparecen con error algunas funciones de la librería: WiFiMulti, HTTP_CODE_OK, HTTP_CODE_MOVED_PERMANENTLY, entre otras en la primera me dice por ejemplo que no está declarada en el scope ... :disappointed_relieved: curiosamente cuando lo desarrollé con el IDE de arduino no daba error en esas funciones... que cansino es esto :frowning:

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
ESP8266WiFiMulti WiFiMulti;
const int ledPIN = 4;
const int ledPIN2 = 2;
void setup() {
 pinMode(ledPIN , OUTPUT);  //definir pin como salida
 pinMode(ledPIN2 , OUTPUT);  //definir pin como salida
  Serial.begin(115200);
  // Serial.setDebugOutput(true);
  Serial.println();
  Serial.println();
  Serial.println();
  for (uint8_t t = 4; t > 0; t--) {
    Serial.printf("[SETUP] WAIT %d...\n", t);
    Serial.flush();
    delay(1000);
  }
  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("xxxx", "xxxx");
}
void loop() {
  // wait for WiFi connection
  if ((WiFiMulti.run() == WL_CONNECTED)) {
    WiFiClient client;
    HTTPClient http;
    Serial.print("[HTTP] begin...\n");
    if (http.begin(client, "[url=http://192.168.1.2/arduino/recuperadadesgaraig.php][color=#1155cc]http://192.168.xx.xx/arduino/xxxxxx.php[/url]")) {  // HTTP
      Serial.print("[HTTP] GET...\n");
      // start connection and send HTTP header
      int httpCode = http.GET();
      // httpCode will be negative on error
      if (httpCode > 0) {
        // HTTP header has been send and Server response header has been handled
        //Serial.printf("[HTTP] GET... code: %d\n", httpCode);
        // file found at server
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
          String payload = http.getString();
          Serial.println(payload);
          if(payload == "1"){
            digitalWrite(ledPIN , HIGH);
          }else{
            digitalWrite(ledPIN , LOW);
          }
        }
      } else {
        Serial.printf("[HTTP] GET... failed, error: %s\n",  http.errorToString(httpCode).c_str());
      }
      http.end();
    } else {
      Serial.printf("[HTTP} Unable to connect\n");
    }
  }
  digitalWrite(ledPIN2 , LOW);
  delay(5000);
  digitalWrite(ledPIN2 , HIGH);
  delay(50000);
}

Buenas:

Vayamos por partes.

Parte 1:
Tienes el código de Arduino, ya que los datos se transfiere por puerto serie, cualquier o casi cualquier plataforma o tecnología te puede servir.

En mi época de los PIC, concretamente el famoso y popular PIC16F84A. He logrado hace muchísimos años controlar entradas y salidas del microcontrolador y mostrarlo en PHP junto a MySQL. Luego por el 2.016 usé una base de datos con información, Arduino y Java para controlar por internet el apagado y encendido del Led y funcionaba, lento pero funcionaba. Luego tengo ejemplos que todavía no he publicado controlar Arduino el Led mediante correo electrónico, enviando comandos desde el movil, funciona, aunque ahora lo dejé de lado y me falta pulir, pero funciona.

Con todo esto. ¿Qué es lo que quiero decirte realmente?

Ahora estamos en pleno 2.021 y la tecnología ha cambiado mucho, a parte de esto, las tecnología que se están usando actualmente. Ya no se usa Flash por ponerte un ejemplo, ahora se usa HTML 5 en su lugar. En cuanto a PHP, ya se dejó un poco de lado, ahora está con Python por todas partes. Aquí también manda la comunidad.

Parte 2:
Aprovechando que usas variables como estas:

const int ledPIN = 4;
const int ledPIN2 = 2

¿Por qué entu programa usas int en vez de Byte?
Ya que un Byte se compone de 0 hasta 255 pines por usar. En vez usar int, usas byte porque ahorras memoria, para los microcontroladores es muy importante acostumbrase a ahorrar memoria. Está claro que si usas const, vas a dejar los valores fijos, cosa que está bien hecho. En tu caso, lo ideal sería así:

const byte ledPIN = 4;
const byte ledPIN2 = 2;

Una parte donde también se gasta memoria, es usar LCD o print(); para comentarios, lo ideal es guardar estos comentarios que proporciona println("comentario") se aen LCD o Seerial o lo que sea, en la memoria programa.
Aquí abajo pusiste:

Serial.printf("[HTTP} Unable to connect\n");

En vez de usar la RAM, pues lo guardas en la memoria programa como indica abajo.

Serial.printf(F("[HTTP} Unable to connect\n"));

Parte 3:
Como la tecnología o la comunidad elige ciertas tecnologías, tienes que tener en cuenta lo que se usa hoy en día y que esté muy actualizado.
La forma como trabajo, es ver las tecnologías a usar y cuando la elija, pues hacer capaz.
Por ejemplo, en mi caso, uso una base de datos, el que sea, una interfaz con Visual Studio Community de cualquier lenguaje y tecnología que puede ser programa de escritorio o tipo Web y Arduino.

  1. Arduino para controlar periféricos entradas y salidas de datos sean digitales y/o analógicos.
  2. Un PC o ordenador de sobre mesa, ahora una buena Raspberry Pi por su bajo consumo y tamaño para hacer de servidor.
  3. Una base de datos guardado en un PC o RaspBerry Pi.
  4. Conexión a Internet.
    Ya no necesita más.

Actuadores <-----> Arduino <-----> PC <-----> Base de datos <-----> Interfaz <-----> Conexión a Internet.

  • Un ejemplo. Uso Arduino que tiene un display LCD 20x4 en el cual me muestra en todo momento los estados de entradas y salidas. Arduino controla una habitación, ventilador, extractor de aire, ventana motorizada, deteción de gases, alarma, temperatura, humedad, detección si hay apagón de luz y incluye su UPS, etc...
  • Ese Arduino lo tengo directamente conectado a su USB al PC.
  • En el PC tengo una interfaz que controla el puerto serie/USB y una base de datos.
  • Tengo conexión en el PC a Internet.
  • La base de datos instalada tengo una buena tabla hecha sobre control de relés y estados de avisos o alarmas.
  • Si cambio un valor en una base de datos, por ejemplo, un 1, se me enciende un Led, si pongo un 0, se apaga un Led.
  • La interfaz detecta un cambio en la base de datos los datos, lo envía al puerto serie ese valor y le llega a Arduino.
  • En la propia Interfaz de un programa de escritorio o Web, puede cambiar valores en la base de datos que también envía datos a Arduino.

Parte 4:
Mi proyecto fue.

MySQL: Probando todo bajo Windows XP en su día. Hice hasta un turorial básico para que la gente y a mi mismo no se me olvide hacer estas cosas. Creé una base de datos con cuenta de usuario, sabe hora y fecha de inicio de sección para personas autorizadas para modificar los estados de la tabla, por ejemplo, cambiar 1 por el 0, que quiere decir Led encendido por otro apagado. También registra actividad en la base de datos de los estados de los Led. MySQL no es capaz de controlar el puerto serie directamente.

PHP: Crear una interfaz Web para ver y modificar la tabla de la base de datos. La interfaz para entrar tiene cuenta y usuario. Al entrar se ve la interfaz de control de Led, relés, cualquier dispositivo. PHP no es capaz de controlar el puerto serie directamente.

Visual Studio: En mi caso uso mucho C#, si hago tutoriales ya uso múltimples lenguaje para la gente pueda crear su propia Interfaz. La interfaz controla la base de datos y hace de puente, es decir, lo que lee o modifica la tabla de la base de datos, la Interfaz en C# envía y recibe datos por el puerto serie.

Parte 5:
Creé una interfaz en Visual C# que es esta, ya no tengo el código fuente, de todas formas comento lo que puedes hacer con ella. En el futuro lo haré, el proyecto completo. Con RaspBerry Pi, Arduino, LCD, relés y demás todo en una caja de plástico para electrónica.

Cada relé se le puede poner un nombre que quiera en la configuración, incluida sensores de entradas como puedes ver en la captura de abajo.

Interfaz.

Prototipo hardware con microcontrolador.


Me quedé si dinero que era estudiante en esas fechas y no completé la parte de los relés. Hoy en día ya hay módulos hechos gracias a Arduino, antes todo hay que hacer la placa a mano. Si este prototipo funcionara, ya habría hecho otra placa con insoladora, luego que me hagan hacer la placa verde de fábrica desde China para un acabado más profesional. Ahora cualquier cosa, incluido sensores, ya vienen con placa, conectas y punto. Más rápido y barato.

Te dejo 2 tutoriales, fijate si te ayudan

El primero creo que es algo básico, igual pégale una mirada

El segundo creo que va mas al grano, fijate la sección de VSC.

No conozco el VS actual así que me remito a lo.que encontré en la red, yo me quedé en VS6... ::slight_smile:

Saludos

Buenas:

En el enlace que psusiste indica como instalar esas librerías. Aunque personalmente prefiero Visual Studio Community que es más completo, también se instala.

Arduino IDE for Visual Studio (Visual Micro)

También puede hacer esto.
Pruebo los comandos del en el Hyper Terminal de Windows o otro similar y me funciona. He hecho un poco mi propio programa en Windows Form y controlado el puerto serie en el cual puedo con botones apagar y encender el zumbador o pitido del SAI o UPS.

El programa que incluye es por Web local. La ruta para acceder es con un archivo que se llama agent.cmd y en su interior tiene este código.

start http://localhost:3052/local/


Ver imagen.

Lo curioso que la forma de controlar el puerto serie el programa oficial, es con un programa modo servicio, que lo puedo detener o arrancar como dice abajo.

Ver imagen.

Este detalle lo intentaré hacerlo en otro proyecto mucho más adelante. ;)
No controlar la UPS, sino otros aparatos como Arduino por puerto serie de esta manera, por vía Web.

Sigo interpretado tu código, ya que me ha aportado muchas ideas. Sobre todo de diferenciar códigos de respuestas según código enviado.

¿Qué no sabes como es el Visual Studio de ahora?
No pasa nada, ponte hacer tutoriales de programas por puerto serie con Arduino y poco a poco te irás familiarizando.

Saludos.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.