Introducción
En este post se explicará cómo configurar el sistema de comunicación entre M-Duino y el Módulo WiFi. Para ello, utilizaremos un protocolo de comunicación llamado SimpleComm. Hay un ejemplo práctico al final del post.
Tenemos otro post donde explicamos cómo funciona el módulo ESP-32 según tu ficha técnica:
Publicar: Módulo Wifi / Bluetooth ESP32 Devkit v1
Aquí tienes un enlace a cada ficha técnica:
Ficha técnica de la serie ESP32
Software:
Debes tener el Placas Industrial Shields instalado (versión mínima 1.1.17)
Explicación de SimpleComm
SimpleComm está disponible en la Librería Tools40. Aquí puedes ver cómo descargar esa Librería.
Para ver cómo funciona SimpleComm echa un vistazo al siguiente blog post.
M-Duino WiFi & BT Family PLCs
Ejemplos de Arduino IDE
Placa PLC WiFi y BLE
En primer lugar, tenemos un código de ejemplo para M-Duino shield donde inicializamos los datos, creamos y enviamos un paquete, haciendo la función de Tx (Master).
En este se utiliza la Librería WifiModule.h para acceder al puerto serie para la comunicación interna entre el PLC y el módulo WiFi.
Aquí tienes el código del PLC Wifi & BLE (Para compilar este sketch a tu módulo PLC, por favor conecta el PLC a tu ordenador conectando el cable micro USB al puerto micro USB de la zona superior):
/* Copyright (c) 2019 Boot&Work Corp., S.L. All rights reserved This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <SimpleComm.h>
#include <WifiModule.h> typedef struct { char name[15]; uint8_t input; uint16_t value; } data_t; SimplePacket packet; data_t data; //////////////////////////////////////////////////////////////////////////////////////////////////// void setup() { Serial.begin(9600L); WifiModul.begin(115200UL); SimpleComm.begin(); Serial.println("Wifi Module started"); } //////////////////////////////////////////////////////////////////////////////////////////////////// void loop() { static uint32_t lastSent = 0UL; if (millis() - lastSent > 1000) { lastSent = millis(); // Init data sprintf(data.name, "ABCD"); data.input = 7; data.value = analogRead(I0_7); // Create packet from data packet.setData(&data, sizeof(data)); // Send packet if (!SimpleComm.send(WifiModule, packet, 0)) { Serial.println("Send packet error"); } } }
1.-Selecciona Herramientas > Placa > Familia M-Duino WiFi/BT.
2.-Selecciona Herramientas > Industrial shields > Modelo: "Selecciona tu propio PLC WiFi/BT M-Duino":
3.-Selecciona Herramientas > Puerto > El puerto donde tienes conectado tu dispositivo (en este caso es el COM72).
4.-Subir el programa. Pulsa sobre la flecha situada en la parte superior izquierda de la ventana.
Placa ESP-32
Centrándonos en este shield, tenemos otro código de ejemplo llamado 'esp32' donde recibimos el paquete previamente creado en el código 'mega', haciendo la función Rx (Slave). En este se utiliza Serial2 como puerto para la comunicación (Serial2 del Módulo WiFi).
Aquí tienes el código 'esp32', para cargar este sketch en tu módulo WiFi, por favor conecta el cable micro USB a la toma micro USB del lado izquierdo:
/*Copyright (c) 2019 Boot&Work Corp., S.L. All rights reservedThis program is free software: you can redistribute it and/or modifyit under the terms of the GNU Lesser General Public License as published bythe Free Software Foundation, either version 3 of the License, or(at your option) any later version.This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <SimpleComm.h> typedef struct { char name[15]; uint8_t input; uint16_t value; } data_t; SimplePacket packet; char json[100]; //////////////////////////////////////////////////////////////////////////////////////////////////// void setup() { Serial.begin(115200UL); Serial2.begin(115200UL); SimpleComm.begin(); Serial.println("esp32 started"); } //////////////////////////////////////////////////////////////////////////////////////////////////// void loop() { if (SimpleComm.receive(Serial2, packet)) { const data_t *data = (const data_t *) packet.getData(); if (data != nullptr) { // Print received data Serial.print("Received data: "); Serial.print(data->name); Serial.print("; "); Serial.print(data->input); Serial.print("; "); Serial.print(data->value); Serial.println(); // Create JSON from data values sprintf(json, "{\"name\":\"%s\",\"input\":%d,\"value\":%d}", data->name, data->input, data->value); Serial.print("JSON: "); Serial.println(json); } } }