Skip to content

Instantly share code, notes, and snippets.

@prasertsakd
Last active July 16, 2024 09:27
Show Gist options
  • Save prasertsakd/950d7c34d5fa2bbfda7738fe40b6ea92 to your computer and use it in GitHub Desktop.
Save prasertsakd/950d7c34d5fa2bbfda7738fe40b6ea92 to your computer and use it in GitHub Desktop.
//wifi test
#include <ErriezSerialTerminal.h>
#include <WiFi.h>
#include <ModbusMaster.h>
// LED pin
#define LED_PIN LED_BUILTIN
// Newline character '\r' or '\n'
char newlineChar = '\n';
// Separator character between commands and arguments
char delimiterChar = ' ';
// instantiate ModbusMaster object
ModbusMaster node;
String ssidList;
// const char* ssid = "your-ssid"; // Change this to your WiFi SSID
// const char* password = "your-password"; // Change this to your WiFi password
// digital output
#define DO1 32
#define DO2 33
// digital input
#define DI1 18 // AC OK = 18
#define DI2 19 // Battery Low = 19
#define DI3 25 // isolate input D25
#define DI4 26 // isolate input D26
// #define DI1 32// AC OK = 18
// #define DI2 33 // Battery Low = 19
// #define DI3 4 // isolate input D25
// #define DI4 5 // isolate input D26
//rs 485
// Rx = 16 //485+
// Tx = 17 //485-
// Direction = 15
//rs 485
#define MODBUS_RX_PIN 16
#define MODBUS_TX_PIN 17
#define MODBUS_DE_PIN 15
#define MODBUS_SERIAL_BAUD 9600
// Create serial terminal object
SerialTerminal term(newlineChar, delimiterChar);
// Function prototypes
void unknownCommand(const char *command);
void cmdHelp();
void cmdLedOn();
void cmdLedOff();
void cmdReadPin();
void cmdWifiList();
void cmdDeviceFactoryReset();
void cmdReadModbus();
void setup() {
// Initialize serial port
pinMode(MODBUS_RX_PIN, OUTPUT);
pinMode(MODBUS_DE_PIN, OUTPUT);
// Init in receive mode
digitalWrite(MODBUS_RX_PIN, 0);
digitalWrite(MODBUS_DE_PIN, 0);
Serial.begin(115200);
Serial2.begin(MODBUS_SERIAL_BAUD, SERIAL_8N1, MODBUS_RX_PIN, MODBUS_TX_PIN);
// Serial.setRxBufferSize(128);
// communicate with Modbus slave ID 2 over Serial (port 0)
node.begin(1, Serial2);
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
delay(10);
// Serial.println(F("\nSerial terminal example."));
Serial.println(F("Type 'help' to display usage."));
// Initialize the built-in LED
pinMode(DO1, OUTPUT);
pinMode(DO2, OUTPUT);
pinMode(DI1,INPUT_PULLUP);
pinMode(DI2,INPUT_PULLUP);
pinMode(DI3,INPUT_PULLUP);
pinMode(DI4,INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
// Set default handler for unknown commands
term.setDefaultHandler(unknownCommand);
// Add command callback handlers
term.addCommand("?", cmdHelp);
term.addCommand("help", cmdHelp);
term.addCommand("on", cmdLedOn);
term.addCommand("off", cmdLedOff);
term.addCommand("read", cmdReadPin);
term.addCommand("mod", cmdReadModbus);
// wifi
term.addCommand("list", cmdWifiList);
term.addCommand("reset", cmdDeviceFactoryReset);
}
void loop()
{
term.readSerial();
}
void preTransmission() {
digitalWrite(MODBUS_RX_PIN, 1);
digitalWrite(MODBUS_DE_PIN, 1);
}
void postTransmission() {
digitalWrite(MODBUS_RX_PIN, 0);
digitalWrite(MODBUS_DE_PIN, 0);
}
void unknownCommand(const char *command)
{
// Print unknown command
Serial.print(F("Unknown command: "));
Serial.println(command);
}
void cmdHelp()
{
// Print usage
Serial.println(F("Serial terminal usage:"));
Serial.println(F(" help or ? Print this usage"));
Serial.println(F(" on Turn DO on"));
Serial.println(F(" off Turn DO off"));
Serial.println(F(" read read digital input"));
Serial.println(F(" list wifi scan"));
}
//////////////////////////////////////
void cmdWifiList() {
// WiFi.mode(WIFI_MODE_STA);
WiFi.disconnect();
delay(100);
int n = WiFi.scanNetworks();
delay(10);
ssidList = WiFi.SSID(0);
for (int i = 1; i < n; ++i) {
ssidList += "\n\r";
ssidList += WiFi.SSID(i);
}
delay(10);
Serial.println("Wifi Scan");
Serial.println(ssidList);
Serial.println();
}
void cmdDeviceFactoryReset() {
// reset the wifi config
delay(3000);
ESP.restart();
}
void cmdReadModbus() {
int result;
Serial.println("Modbus Temperature");
result = node.readInputRegisters(1, 1);
if (result == node.ku8MBSuccess) {
for (int j = 0; j < 1; j++) {
Serial.print( node.getResponseBuffer(j) );
}
}
Serial.print(",");
result = node.readInputRegisters(2, 1);
if (result == node.ku8MBSuccess) {
for (int j = 0; j < 1; j++) {
Serial.println ( node.getResponseBuffer(j) );
}
}
}
//////////////////////////////////////
void cmdLedOn()
{
// Turn LED on
Serial.println(F("Turn on"));
digitalWrite(LED_PIN, HIGH);
digitalWrite(DO1, HIGH);
digitalWrite(DO2, HIGH);
}
void cmdLedOff()
{
// Turn LED off
Serial.println(F("Turn off"));
digitalWrite(LED_PIN, LOW);
digitalWrite(DO1, LOW);
digitalWrite(DO2, LOW);
}
void cmdReadPin()
{
// read di
Serial.println("Digital Read");
Serial.print("AC_OK :");
Serial.println( digitalRead(DI1) );
Serial.print("Batt_Low :");
Serial.println ( digitalRead(DI2) );
Serial.print("D25 :");
Serial.println ( digitalRead(DI3) );
Serial.print("D26 :");
Serial.println ( digitalRead(DI4) );
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment