1-Wire 18B20 a thinkspeak (invalid use of void expression)

Odpovědět
mikro_cz
Příspěvky: 2
Registrován: 30 led 2018, 17:52
Reputation: 0

1-Wire 18B20 a thinkspeak (invalid use of void expression)

Příspěvek od mikro_cz » 30 led 2018, 18:12

Dobrý den, potřeboval bych od Vás pomoci. předem to bude určitě nějaká blbost. nejsem nějaký velký programátor. spíš se polehoučku učím.
Mám 5senzorů.Vyčrtl jsme si jejich adresy. chci podle adres vyčíst teploty a ty pak odeslat na thinkspeak.
Když sestavuju string do THS (thuinkspeak) zavolám si vypsání teploty dle adresy a pokračuju na další snímač. Ovšem při kompilaci mě to vypíše chybu viz dole. Bude to chyba o pointrech atd. ale jsem v tom holt blbej :-(
Jedu na Wemosu D1mini. V kodu je ještě pozustatek předchozího projektu (včelařské váhy) proto uspávání wifiny, a ESpčka.. to je ale bez vlivu na tuhle blbou chybu.
Snad z popisu a z kodu to bude trochu patrné.
Děkuju všem za cokoliv co mě pomůže, případně dovysvětlím co je potřeba.
Díky moc.

Kód: Vybrat vše

   
/*Kotelna*/
//new chanell : Channel ID: 412xxx
//API KEY: read : xxxx35ETOOT4RNNC
//API KEy write : xxxxxOY6SRATRK841



#include <OneWire.h>
#include <Wire.h>
#include <DallasTemperature.h>
#include <ESP8266WiFi.h>
#define ONE_WIRE_BUS D7
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
WiFiClient client;
ADC_MODE(ADC_VCC); 
extern "C" {
#include "user_interface.h"
}

const char* ssid = "G2_8805";
const char* password = "830xxxxx9";
const char* server = "api.thingspeak.com";
const char* api_key = "xxxxVF35ETOOT4RNNC";

DeviceAddress Probe01 = { 0x28, 0x8A, 0xB1, 0x40, 0x04, 0x00, 0x00, 0xC7 }; //Kotelzpatecka
DeviceAddress Probe02 = { 0x28, 0xCC, 0x92, 0x40, 0x04, 0x00, 0x00, 0xB6 }; //Kotelvystup
DeviceAddress Probe03 = { 0x28, 0x4D, 0x8D, 0x40, 0x04, 0x00, 0x00, 0x78 }; //Stoupacka
DeviceAddress Probe04 = { 0x28, 0x9A, 0x80, 0x40, 0x04, 0x00, 0x00, 0xD5 }; //Zpatecka
DeviceAddress Probe05 = { 0x28, 0xE1, 0xC7, 0x40, 0x04, 0x00, 0x00, 0x0D }; //3CVvstup





void setup() {
  Serial.begin(115200);
  delay(10);
  WiFi.begin(ssid, password);
  sensors.begin();
  sensors.setResolution(Probe01, 10);
  sensors.setResolution(Probe02, 10);
  sensors.setResolution(Probe03, 10);
  sensors.setResolution(Probe04, 10);
  sensors.setResolution(Probe05, 10);
}

void loop() {
 WiFi.forceSleepWake();
delay( 10 );
WiFi.mode( WIFI_STA );
WiFi.begin(ssid, password);
  delay(300);
  float vdd = (ESP.getVcc() / 1024.00f)*1.22f;
  
  sensors.requestTemperatures();

  Serial.print("Probe 01 temperature is:   ");
  printTemperature(Probe01);
  Serial.println();
  Serial.print("Probe 02 temperature is:   ");
  printTemperature(Probe02);
  Serial.println();
  Serial.print("Probe 03 temperature is:   ");
  printTemperature(Probe03);
  Serial.println();
  Serial.print("Probe 04 temperature is:   ");
  printTemperature(Probe04);
  Serial.println();
  Serial.print("Probe 05 temperature is:   ");
  printTemperature(Probe05);
  Serial.println();
  Serial.print(vdd);
  Serial.println();
  
if (client.connect(server,80)) {
Serial.println("Connect to ThingSpeak - OK"); 
 
sensors.requestTemperatures();
 
String dataToThingSpeak = "";

dataToThingSpeak+="GET /update?api_key=";
dataToThingSpeak+=api_key;
dataToThingSpeak+="&field1=";
dataToThingSpeak+=String(printTemperature(Probe01));
dataToThingSpeak+="&field2=";
dataToThingSpeak+=String(printTemperature(Probe02));
dataToThingSpeak+="&field3=";
dataToThingSpeak+=String(printTemperature(Probe03));
dataToThingSpeak+="&field4=";
dataToThingSpeak+=String(printTemperature(Probe04));
dataToThingSpeak+="&field5=";
dataToThingSpeak+=String(printTemperature(Probe05));
dataToThingSpeak+=" HTTP/1.1\r\nHost: a.c.d\r\nConnection: close\r\n\r\n";
dataToThingSpeak+="";
client.print(dataToThingSpeak);
Serial.println(dataToThingSpeak);

}

 while(client.available()){
    String line = client.readStringUntil('\r');
  Serial.print(line);
  }
   
Serial.println(".....");
WiFi.disconnect();
delay(2);
Serial.println("Wifi disconnect");
WiFi.mode(WIFI_OFF);
delay(2);
Serial.println("Wifi OFF");
WiFi.forceSleepBegin();
Serial.println("Force sleep begin");
delay(2);
Serial.println("Spanek 5sec");

delay(10000*10); //  10 sec

}
void printTemperature(DeviceAddress deviceAddress)
{

float tempC = sensors.getTempC(deviceAddress);
   }
   
   
Chyba :

C:\Users\Nehet\Desktop\Kotelna\Kotelna.ino: In function 'void loop()':

Kotelna:94: error: invalid use of void expression

dataToThingSpeak+=String(printTemperature(Probe01));

^

Kotelna:96: error: invalid use of void expression

dataToThingSpeak+=String(printTemperature(Probe02));

^

Kotelna:98: error: invalid use of void expression

dataToThingSpeak+=String(printTemperature(Probe03));

^

Kotelna:100: error: invalid use of void expression

dataToThingSpeak+=String(printTemperature(Probe04));

^

Kotelna:102: error: invalid use of void expression

dataToThingSpeak+=String(printTemperature(Probe05));
^

exit status 1
invalid use of void expression

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: 1-Wire 18B20 a thinkspeak (invalid use of void expression)

Příspěvek od martinius96 » 30 led 2018, 18:34

očakávaš nejakú premennú, ale funkcia je typu void, nevracia žiadnu hodnotu.
Možno máš novšiu knižnicu akú si mal a je to tam pozmenené, možno musíš kód navrhnúť nanovo a inak.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: 1-Wire 18B20 a thinkspeak (invalid use of void expression)

Příspěvek od pavel1tu » 30 led 2018, 21:10

A proč nepoužíváš knihovnu ThingSpeak.h která umí zapisovat pomocí funkce ThingSpeak.writeField ?

Je dávno co jsem to zkoušel, ale má dojem že jsem to dělal takhle "ThingSpeak.writeField(myChannelNumber, 1, voltage, myWriteAPIKey);"
Dělal jsem to přímo podle knihovny a příkladu z ní

Nemám to ale jak vyzkoušet.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

ohruska
Příspěvky: 235
Registrován: 08 pro 2017, 20:56
Reputation: 0

Re: 1-Wire 18B20 a thinkspeak (invalid use of void expression)

Příspěvek od ohruska » 30 led 2018, 22:38

Zdravím.
Zkusil jsem ten tvůj kód na zkoušku zjednodušit a ono nic.

Kód: Vybrat vše

#include <DallasTemperature.h>

DeviceAddress Probe01 = { 0x28, 0x8A, 0xB1, 0x40, 0x04, 0x00, 0x00, 0xC7 }; //Kotelzpatecka
//float tempC;
void setup() {
  // put your setup code here, to run once:
    Serial.begin(9600);
    Serial.print("Probe 01 temperature is:   ");
    printTemperature(Probe01);
    Serial.println();
}

void loop() {
  // put your main code here, to run repeatedly:
}
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = 25.254;
}
Na výpisu bylo toto :
Probe 01 temperature is:
Ale jak ti psal kolega
očakávaš nejakú premennú, ale funkcia je typu void, nevracia žiadnu hodnotu.
Je to třeba upravit, "void" změnit na funkci "float" a doplnit co má funkce vracet, "return tempC;" A ještě upravit výpis na obrazovku printTemperature(Probe01); na "Serial.print(printTemperature(Probe01));"

Kód: Vybrat vše

#include <DallasTemperature.h>

DeviceAddress Probe01 = { 0x28, 0x8A, 0xB1, 0x40, 0x04, 0x00, 0x00, 0xC7 }; //Kotelzpatecka
//float tempC;
void setup() {
  // put your setup code here, to run once:
    Serial.begin(9600);
    Serial.print("Probe 01 temperature is:   ");
    Serial.print(printTemperature(Probe01));
    Serial.println();
}

void loop() {
  // put your main code here, to run repeatedly:

}

float printTemperature(DeviceAddress deviceAddress)
{

float tempC = 25.254;
return tempC;
}
Na výpisu se objeví toto :
Probe 01 temperature is: 25.25
Pak by mělo fungovat i odesílání hodno na server. "dataToThingSpeak+=String(printTemperature(Probe01));"

afilip
Příspěvky: 116
Registrován: 26 črc 2017, 16:34
Reputation: 0
Kontaktovat uživatele:

Re: 1-Wire 18B20 a thinkspeak (invalid use of void expression)

Příspěvek od afilip » 01 úno 2018, 20:25

To je celé nějaké divné.
Načtěte si na začátku všech 5 teplot do proměnných float teplota1 až teplota5 pomocí requestTemperatures,

převeďte to na string
char buf[25];
String strTeplota1 = dtostrf(teplota1, 5, 2, buf);
String strTeplota2 = dtostrf(teplota2, 5, 2, buf);
atd.

a potom ten string bude vypadat
dataToThingSpeak+="&field1=";
dataToThingSpeak+=String(strTeplota1));
dataToThingSpeak+="&field2=";
dataToThingSpeak+=String(strTeplota2));
atd.

mikro_cz
Příspěvky: 2
Registrován: 30 led 2018, 17:52
Reputation: 0

Re: 1-Wire 18B20 a thinkspeak (invalid use of void expression)

Příspěvek od mikro_cz » 14 úno 2018, 21:37

Zdravím,
Děkuji všem. Vyřešil sem to : return tempC a jsem funkční.
Děkuju všem za pomoc.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti