И что? Значение float имеет полное право иметь значение NAN. Вот код из вашей библиотеки
float DHT::readHumidity(bool force) {
float f = NAN;
if (read()) {
switch (_type) {
case DHT11:
f = data[0];
break;
case DHT22:
case DHT21:
f = data[0];
f *= 256...
внешний криптопроцессор с достаточной скоростью и памятью (уровня stm32f415) :) но это будет заведомо дороже. Просто поймите, что любая крипта это по сути перемножение массивов 32 или 64 байтных (не битных!) чисел и на простеньких контроллерах это либо упирается в память, либо в скорость...
Если она не совсем белая, а пока розоватая то она еще и излучает ИК сама :)
и да...
4. Светодиод и фотодиод установлены не соосно, а смотрят в немного разных направлениях
попробуйте client.publish("test", String(ppm)), если не съест (никогда не работал с mqqt...) придется так:
String ppms = String(ppm);
int ppml = ppms.length() + 1;
char databuf[ppml];
ppms.toCharArray(databuf, ppml);
client.publish("test", databuf);
А средний резистор (который на самом деле перемычка 0 Ом) закорачивает шины 5 и 3.3 вольта. Он нужен только при питании платки от 3.3В. Если она питается от 5В то эту перемычку надо удалить а на обратной стороне припаять стабилизатор (там для него есть место).