Thanks for looking at that Wolfgang, you are very kind to do all that work.
Do you have an Uno to try with?
Like Mark I doubted my wiring so I had redone it several times before I looked at the code.
Yes, it definitely seems to be due to lack of memory on the UNO.
- Use bigger memory device, like your Wemos D1
- Limit sensors used
- Spread sensors over several microcontroller boards
- It may be possible to save some memory, so that lower powered devices can be used
The main memory hogs are the JSON calls that are copied back to a large long string. The JSON object is big and the string output to the serial port is larger.
In addition, reading about the String object suggests that it is somewhat notorious for giving memory problems.
I have been looking at the code and I am trying to get rid of the String objects and the ArduinoJSON library.
I see the same information is in three places - the basic structure storing the results for each sensor, the JSON object
and the large character buffer that is built up to send to the serial port.
I have written a shortJSON library to generate the JSON strings. I store these in a character buffer for each sensor (the memory is assigned at the start and continuously reused) I just allocated a little more characters than are needed to accomodate the sensor readings.
At the moment I call the function to update this character buffer every time
when the sensor is updated (I call it after the structure is updated eg mlxData.variable.= mlxreadCAll(object).
This is a little wasteful in processing time but the strings are just there and ready to go when they are requested.
These are just Serial.print(MLXstring); on the calls to w, p etc. from the serial console.
I have these working for davis, mlx, tsl and bme, no problem with funny output or memory shortage so far, so seems stable with less memory usage.
Before I move on to the other sensors I will see if I can get indi to talk to the new code.
I will upload the code to github so you can have a look at it.