char lenghts? int and floats?

I am having trouble with my code and it might help to learn more about the HDC1080 and the coding used to get the data. I’m running it off an esp-12 module.
I am using the code from the closedcube project on github. It works great and I have it triggering an LED right now, if humid >50% or temp>30 C.

But I want to use wifimanager from github as well. This will allow me to change the temperature or humidity thresholds (for trigger) in AP mode. (I didn’t change the labels, so mqtt_port is the example parameter I’m playing with, but really it’s tied to my humidity through:

if (hdc1080.readHumidity() >= mqtt_port[3] || hdc1080.readTemperature() >= 30){
  digitalWrite(LED, HIGH);

which will trigger my LED.

I have this working almost. I have a problem with the length of data. I’m playing with the size of chars right now and it’s just getting me close.

In the following code I also have a: char mqtt_port[3];

and: WiFiManagerParameter custom_mqtt_port("port", "mqtt port", mqtt_port, 5);

With x=3, y=3, and z=5 I can get a code that triggers within 5-12 points of whatever input during AP mode.

Thank you for looking

#include <FS.h>                   //this needs to be first, or it all crashes and burns...

#include <ESP8266WiFi.h>          //

//needed for library
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>          //

#include <ArduinoJson.h>          //

#include <Wire.h>
#include "ClosedCube_HDC1080.h"

#define LED 15
ClosedCube_HDC1080 hdc1080;

//define your default values here, if there are different values in config.json, they are overwritten.
char mqtt_server[40]; 
char mqtt_port[3];
char blynk_token[34] = "YOUR_BLYNK_TOKEN";

//flag for saving data
bool shouldSaveConfig = false;

//callback notifying us of the need to save config
void saveConfigCallback () {
  Serial.println("Should save config");
  shouldSaveConfig = true;

void setup() {
  // put your setup code here, to run once:

  //clean FS, for testing
pinMode(LED, OUTPUT);
  //read configuration from FS json
  Serial.println("mounting FS...");

  if (SPIFFS.begin()) {
    Serial.println("mounted file system");
    if (SPIFFS.exists("/config.json")) {
      //file exists, reading and loading
      Serial.println("reading config file");
      File configFile ="/config.json", "r");
      if (configFile) {
        Serial.println("opened config file");
        size_t size = configFile.size();
        // Allocate a buffer to store contents of the file.
        std::unique_ptr<char[]> buf(new char[size]);

        configFile.readBytes(buf.get(), size);
        DynamicJsonBuffer jsonBuffer;
        JsonObject& json = jsonBuffer.parseObject(buf.get());
        if (json.success()) {
          Serial.println("\nparsed json");

          strcpy(mqtt_server, json["mqtt_server"]);
          strcpy(mqtt_port, json["mqtt_port"]);
          strcpy(blynk_token, json["blynk_token"]);

        } else {
          Serial.println("failed to load json config");
  } else {
    Serial.println("failed to mount FS");
  //end read

  // The extra parameters to be configured (can be either global or just in the setup)
  // After connecting, parameter.getValue() will get you the configured value
  // id/name placeholder/prompt default length
  WiFiManagerParameter custom_mqtt_server("server", "mqtt server", mqtt_server, 30);
  WiFiManagerParameter custom_mqtt_port("port", "mqtt port", mqtt_port, 5);
  WiFiManagerParameter custom_blynk_token("blynk", "blynk token", blynk_token, 32);

  //Local intialization. Once its business is done, there is no need to keep it around
  WiFiManager wifiManager;

  //set config save notify callback

  //set static ip
  wifiManager.setSTAStaticIPConfig(IPAddress(10,0,1,99), IPAddress(10,0,1,1), IPAddress(255,255,255,0));
  //add all your parameters here

  //reset settings - for testing

  //set minimu quality of signal so it ignores AP's under that quality
  //defaults to 8%
  //sets timeout until configuration portal gets turned off
  //useful to make it all retry or go to sleep
  //in seconds

  //fetches ssid and pass and tries to connect
  //if it does not connect it starts an access point with the specified name
  //here  "AutoConnectAP"
  //and goes into a blocking loop awaiting configuration
  if (!wifiManager.autoConnect("WatchDog", "aeronikon23")) {
    Serial.println("failed to connect and hit timeout");
    //reset and try again, or maybe put it to deep sleep

  //if you get here you have connected to the WiFi
  Serial.println("connected...yeey :)");

  //read updated parameters
  strcpy(mqtt_server, custom_mqtt_server.getValue());
  strcpy(mqtt_port, custom_mqtt_port.getValue());
  strcpy(blynk_token, custom_blynk_token.getValue());

  //save the custom parameters to FS
  if (shouldSaveConfig) {
    Serial.println("saving config");
    DynamicJsonBuffer jsonBuffer;
    JsonObject& json = jsonBuffer.createObject();
    json["mqtt_server"] = mqtt_server;
    json["mqtt_port"] = mqtt_port;
    json["blynk_token"] = blynk_token;

    File configFile ="/config.json", "w");
    if (!configFile) {
      Serial.println("failed to open config file for writing");

    //end save

  Serial.println("local ip");
  Serial.println("ClosedCube HDC1080 Arduino Test");


  Serial.print("Manufacturer ID=0x");
  Serial.println(hdc1080.readManufacturerId(), HEX); // 0x5449 ID of Texas Instruments
  Serial.print("Device ID=0x");
  Serial.println(hdc1080.readDeviceId(), HEX); // 0x1050 ID of the device

void loop() {
  // put your main code here, to run repeatedly:
  Serial.print("C, RH=");
 // Serial.println(mqtt_server);
  if (hdc1080.readHumidity() >= mqtt_port[3] || hdc1080.readTemperature() >= 30){
  digitalWrite(LED, HIGH);
  digitalWrite(LED, LOW);



Why do you have HTML formatting in your code? Get rid of it and repost. i.e., I see this: z which oddly enough is almost valid c code.

Hey thanks for checking out the thread. The xyz is just for this forum, it's not in the full code I use or posted. My intention was to highlight those three arguments as the ones I'm playing around with, and the fact that I don't know if they should equal each other or what. I have a vague understanding, that it's the room for the data and you dont want to call more than you allocated otherwise you will have info you don't want. But I'm not sure how to manipulate them to correctly call the saved parameter and use it as a threshold value for LED, email, whatever.

@Frozenguy, do not cross-post. Other thread removed.

I don't understand what you're asking but you can determine the size of any type like so (using char as an example):


Thank you, I'll use that and see if it gives me more info on whats happening.

Basically I have a variable, char that I want to be able to change with an input outside of the IDE. This variable will act as a threshold for LED or whatever.

I input the new char value (through ESP's access point), and then try and call it as a threshold to trigger an LED.

What happens is, if I put a values around 55.0% and higher, it may trigger at 52.0% If I put a values around 50.0, it will trigger at 48.0.

Even though serial is printing the correct value saved.

The values are saved with a combination of json and FS system I believe. Then I'm dealing with how the data comes in from the HDC1080 sensor.

When I print mqtt_port, it shows the correct value I input. and it saves great, but it doesn't trigger. Even tough I'm printing mqtt_port, and using mqtt_port as a call for the threshold.