]> jspc29.x-matter.uni-frankfurt.de Git - avr.git/commitdiff
LANTelnetToI2C_Board: power-on read latest change board setting from on-Board EEPROM...
authorOle Artz <ole.artz@t-online.de>
Thu, 23 Jun 2022 13:30:40 +0000 (15:30 +0200)
committerOle Artz <ole.artz@t-online.de>
Thu, 23 Jun 2022 13:30:40 +0000 (15:30 +0200)
esp32/EthernetUART/LANTelnetToI2C_Board/LANTelnetToI2C_Board.ino
esp32/EthernetUART/LANTelnetToI2C_Board/quickstart 4CH ADC_Ethernet Portable Board.pdf

index ebd1deed214d6ff1148576faf158cde894ebf5ae..5dd0abd28e7bc12de75436f42551416634b98ee1 100644 (file)
@@ -1,15 +1,16 @@
 /*
 #####################################################
 # ###                                           ### #
-# ### CODE for ESP32 of LANToI2C_Board_264      ### #
+# ### CODE for ESP32 of LANToI2C_Board          ### #
 # ### for START TELNET SERVER                   ### #
 # ### for LAN to I2C                            ### #
 # ### connected to 4 CH ADC                     ### #
 # ### connected to 0.91 OLED Display            ### #
+# ### use EEPROM to save settings               ### #
 # ###                                           ### #
 # ### author: O.Artz                            ### #
 # ###                                           ### #
-# ### UPDATE 2022-06-07                         ### #
+# ### UPDATE 2022-06-21                         ### #
 # ###                                           ### #
 #####################################################
 
@@ -27,10 +28,25 @@ ETH Disconnected/stopped  -> Orange LED on
 #include <Adafruit_ADS1015.h> //for external ADC
 #include <ETH.h>              //for Telnet Server Connection
 #include <Wire.h>             //for I2C Connection
+#include <EEPROM.h>           //to save settings          
 //__________________________________________
 #include <Adafruit_SSD1306.h> //for OLED display driver
 #include <SPI.h>              //for display control
 
+// define the number of bytes you want to access
+/*
+ * Address    Value
+ * 0x11       ADC measurment range
+ * 0x12       Unit
+ * 0x13, 0x14 Device Transformationfactor
+ * 0x21, 0x22 Voltage divider
+ * 0x31, 0x32 Offset CH 0
+ * 0x33, 0x34 Offset CH 1
+ * 0x35, 0x36 Offset CH 2
+ * 0x37, 0x38 Offset CH 3
+ */
+#define EEPROM_SIZE 512
+
 // for screen
 #define SCREEN_WIDTH 128 // OLED display width, in pixels
 #define SCREEN_HEIGHT 32 // OLED display height, in pixels
@@ -109,20 +125,20 @@ volatile static bool eth_connected = false;
 bool show_connection = true;
 uint8_t rxcnt = 0, txpoint = 0;
 uint8_t rxbuf[11], txbuf[12];
-uint8_t val, new_gain, new_unit;
+uint8_t new_gain, new_unit;
 float vol_div_fac, dev_trans_fac;
 uint16_t new_vol_div_fac, new_dev_trans_fac;
+int16_t new_offset_val;
 int16_t adc0, adc1, adc2, adc3;
 float fadc0, fadc1, fadc2, fadc3;
 float offset0, offset1, offset2, offset3;
-int16_t new_offset_val;
 int chan_offset_num, offset_val;
 uint8_t setGAIN = 0xFFFF;
 float setADCconversion;
 float acGAIN[] = {0.1875, 0.125, 0.0625, 0.03125, 0.015625, 0.0078125};
 adsGain_t asetGAIN[] = {GAIN_TWOTHIRDS, GAIN_ONE, GAIN_TWO, GAIN_FOUR, GAIN_EIGHT, GAIN_SIXTEEN};
 int counter = 0;
-String possible_units[] = {"mV", "mA", "mbar", "degC"};
+String possible_units[] = {"mV", "mA", "mbar", "mPa" "degC"};
 String unit;
 
 void WiFiEvent(WiFiEvent_t event) {
@@ -212,6 +228,7 @@ void setup() {
   connection_screen();
   // test_screen();
 
+  EEPROM.begin(EEPROM_SIZE);
 //Setting for external ADC measurment range  
 // val                                                            ADS1015  ADS1115
 //                                                                -------  -------
@@ -222,39 +239,57 @@ void setup() {
 // 4 ads.setGain(GAIN_EIGHT);      // 8x gain   +/- 0.512V  1 bit = 0.25mV   0.015625mV
 // 5 ads.setGain(GAIN_SIXTEEN);    // 16x gain  +/- 0.256V  1 bit = 0.125mV  0.0078125mV
 
-  val = 2; // chose as default for external adc setting
-  set_adc_gain(val);
+//  new_gain = 2; // chose as default for external adc setting
+  new_gain = EEPROM.read(0x11); 
+  set_adc_gain(new_gain);
 
 // Chose right Unit
 // val  Unit
 // 0    mV
 // 1    mA
 // 2    mbar
-// 3    degC
+// 3    mPa
+// 4    degC
 
-  new_unit = 0; //default mV
+//  new_unit = 0; //default
+  new_unit = EEPROM.read(0x12);
   set_unit(new_unit);
-
-// Channel Offset
-  new_offset_val = 0; //default
-  chan_offset_num = 5; //default all channels
-  set_offset(new_offset_val, chan_offset_num);
-
+  
 // Device Transformationfactor
-  new_dev_trans_fac = 1000; //default
+//  new_dev_trans_fac = 1000, //default
+  new_dev_trans_fac = EEPROM.read(0x13) | EEPROM.read(0x14) << 8;
   set_device_transformation_factor(new_dev_trans_fac);
 
 // Input voltage divider
-  new_vol_div_fac = 1000; //default w/o voltage devider, 1000 cause will devider by 1000 to sent float by telnet
+//  new_vol_div_fac = 1000; //default w/o voltage devider, 1000 cause will devider by 1000 to sent float by telnet
+  new_vol_div_fac = EEPROM.read(0x21) | EEPROM.read(0x22) << 8;
   set_voltage_divider_factor(new_vol_div_fac);
 
+// Channel Offset
+//  new_offset_val = 0; //default
+// CH 0
+  new_offset_val = EEPROM.read(0x31) | EEPROM.read(0x32) << 8;
+  chan_offset_num = 0;
+  set_offset(new_offset_val, chan_offset_num);
+// CH 1
+  new_offset_val = EEPROM.read(0x33) | EEPROM.read(0x34) << 8;
+  chan_offset_num = 1;
+  set_offset(new_offset_val, chan_offset_num);
+// CH 2
+  new_offset_val = EEPROM.read(0x35) | EEPROM.read(0x36) << 8;
+  chan_offset_num = 2;
+  set_offset(new_offset_val, chan_offset_num);
+// CH 3
+  new_offset_val = EEPROM.read(0x37) | EEPROM.read(0x38) << 8;
+  chan_offset_num = 3;
+  set_offset(new_offset_val, chan_offset_num);
+
   Serial.print("\nADC Settings");
   Serial.print("\nActual Gainfactor: ");
-  Serial.print(asetGAIN[val]);
+  Serial.print(asetGAIN[new_gain]);
   Serial.print("\nConversionfactor: ");
   Serial.print(setADCconversion);
   Serial.println();
-
 }
 
 void restart_screen() {
@@ -268,13 +303,15 @@ void restart_screen() {
   // the library initializes this with an Adafruit splash screen.
   // display.display();
 
-  delay(1000); // Pause for 2 seconds
+  delay(1000); // Pause for 1 second
   display.clearDisplay();
 }
 
 void start_screen() {
   // show ikf logo and initials of the programmer 
   display.clearDisplay();
+  display.ssd1306_command(SSD1306_SETCONTRAST);
+  display.ssd1306_command(0); // val=0 := 0% up to val = 255 := 100%
   display.setTextSize(1);              // Normal 1:1 pixel scale
   display.setTextColor(SSD1306_WHITE); // Draw white text
   display.cp437(true);                 // Use full 256 char 'Code Page 437' font
@@ -345,6 +382,8 @@ void show_CH(String unit) {
   display.setTextSize(1);
   if (unit.length() == 4) {
     display.setCursor(SCREEN_WIDTH * 10 / 28, SCREEN_HEIGHT * 2 / 5);
+  } else if (unit.length() == 3) {
+    display.setCursor(SCREEN_WIDTH * 23 / 56, SCREEN_HEIGHT * 2 / 5);
   } else if (unit.length() == 2) {
     display.setCursor(SCREEN_WIDTH * 11 / 28, SCREEN_HEIGHT * 2 / 5);
   }
@@ -371,6 +410,8 @@ void show_VAL(int dadc0, int dadc1, int dadc2, int dadc3, String unit) {
   display.setTextSize(1);
   if (unit.length() == 4) {
     display.setCursor(SCREEN_WIDTH * 10 / 28, SCREEN_HEIGHT * 2 / 5);
+  } else if (unit.length() == 3) {
+    display.setCursor(SCREEN_WIDTH * 23 / 56, SCREEN_HEIGHT * 2 / 5);
   } else if (unit.length() == 2) {
     display.setCursor(SCREEN_WIDTH * 11 / 28, SCREEN_HEIGHT * 2 / 5);
   }
@@ -450,12 +491,12 @@ void set_offset(int16_t new_offset_val, int chan_offset_num) {
   }
 }
 
-void set_voltage_divider_factor(float new_vol_div_fac) {
+void set_voltage_divider_factor(uint16_t new_vol_div_fac) {
   // to set the correct voltage divider factor 
   vol_div_fac = new_vol_div_fac/1000.0;
 }
 
-void set_device_transformation_factor(float new_dev_trans_fac) {
+void set_device_transformation_factor(uint16_t new_dev_trans_fac) {
   // to transformate adc values in device values (units)
   dev_trans_fac = new_dev_trans_fac/1000.0;
 }
@@ -645,6 +686,8 @@ void getdata(uint8_t buf) {
           //    (hex_to_int(rxbuf[7])*16+hex_to_int(rxbuf[8]))&0xFF;
           new_gain = (hex_to_int(rxbuf[9]));
           set_adc_gain(new_gain);
+          EEPROM.write(0x11, new_gain);
+          EEPROM.commit();
 
           send_answer_hex(&rxbuf[0], new_gain);
         }
@@ -654,7 +697,9 @@ void getdata(uint8_t buf) {
           if (hex_to_int(rxbuf[4]) == 0) {
             new_unit = (hex_to_int(rxbuf[9]));
             set_unit(new_unit);
-  
+            EEPROM.write(0x12, new_unit);
+            EEPROM.commit();
+            
             send_answer_hex(&rxbuf[0], new_unit);
           }
           
@@ -662,6 +707,9 @@ void getdata(uint8_t buf) {
           if (hex_to_int(rxbuf[4]) == 1) {
             new_dev_trans_fac = (hex_to_int(rxbuf[6]) * 4096 + hex_to_int(rxbuf[7]) * 256 + hex_to_int(rxbuf[8]) * 16 + hex_to_int(rxbuf[9]));
             set_device_transformation_factor(new_dev_trans_fac);
+            EEPROM.write(0x13, new_dev_trans_fac);
+            EEPROM.write(0x14, new_dev_trans_fac >> 8);
+            EEPROM.commit();
 
             send_answer_hex(&rxbuf[0], new_dev_trans_fac);
           }
@@ -670,7 +718,9 @@ void getdata(uint8_t buf) {
           if (hex_to_int(rxbuf[4]) == 2) {
             new_vol_div_fac = (hex_to_int(rxbuf[6]) * 4096 + hex_to_int(rxbuf[7]) * 256 + hex_to_int(rxbuf[8]) * 16 + hex_to_int(rxbuf[9]));
             set_voltage_divider_factor(new_vol_div_fac);
-
+            EEPROM.write(0x21, new_vol_div_fac);
+            EEPROM.write(0x22, new_vol_div_fac >> 8);
+            EEPROM.commit();
             send_answer_hex(&rxbuf[0], new_vol_div_fac);
           }
         }
@@ -678,7 +728,34 @@ void getdata(uint8_t buf) {
           //offset
           new_offset_val = (hex_to_int(rxbuf[6]) * 4096 + hex_to_int(rxbuf[7]) * 256 + hex_to_int(rxbuf[8]) * 16 + hex_to_int(rxbuf[9]));
           chan_offset_num = (hex_to_int(rxbuf[4]));
-          set_offset(new_offset_val, chan_offset_num); 
+          set_offset(new_offset_val, chan_offset_num);
+          if (chan_offset_num == 0) {
+            EEPROM.write(0x31, new_offset_val);
+            EEPROM.write(0x32, new_offset_val >> 8);
+            EEPROM.commit();
+          } else if (chan_offset_num == 1) {
+            EEPROM.write(0x33, new_offset_val);
+            EEPROM.write(0x34, new_offset_val >> 8);
+            EEPROM.commit();
+          } else if (chan_offset_num == 2) {
+            EEPROM.write(0x35, new_offset_val);
+            EEPROM.write(0x36, new_offset_val >> 8);
+            EEPROM.commit();
+          } else if (chan_offset_num == 3) {
+            EEPROM.write(0x37, new_offset_val);
+            EEPROM.write(0x38, new_offset_val >> 8);
+            EEPROM.commit();
+          } else if (chan_offset_num == 5) {
+            EEPROM.write(0x31, new_offset_val);
+            EEPROM.write(0x32, new_offset_val >> 8);
+            EEPROM.write(0x33, new_offset_val);
+            EEPROM.write(0x34, new_offset_val >> 8);
+            EEPROM.write(0x35, new_offset_val);
+            EEPROM.write(0x36, new_offset_val >> 8);
+            EEPROM.write(0x37, new_offset_val);
+            EEPROM.write(0x38, new_offset_val >> 8);
+            EEPROM.commit();
+          }
 
           send_answer_hex(&rxbuf[0], new_offset_val);
           }
index a51eb1c4ab4cbf9d732eeab0adc879f8f0c0434d..b8558eb3a58124153d90b351423afba0d2b058dc 100644 (file)
Binary files a/esp32/EthernetUART/LANTelnetToI2C_Board/quickstart 4CH ADC_Ethernet Portable Board.pdf and b/esp32/EthernetUART/LANTelnetToI2C_Board/quickstart 4CH ADC_Ethernet Portable Board.pdf differ