Function was not declared in this scope

Nestor Mahno
Offline
Зарегистрирован: 03.10.2015

Здравствуйте, уважаемые ардуинщики!

Помогите, пожалуйста разобраться, самому не получается.

Пишу код в Arduino IDE для ESP8266, но вопрос программный, поэтому пишу сюда, а не в сообщество ESP8266. Хочу отправлять данные на сервис ThingSpeak, при проверке скетча выдает ошибку: "'httpRequest' was not declared in this scope". Код привожу ниже.

Изначально код взят из официального примера, но он написан для ethernet shield и переделан мной. Исходный код компилируется без ошибок. 

#include <ESP8266WiFi.h>
char thingSpeakAddress[] = "api.thingspeak.com";
const char* ssid = "your-ssid";
const char* password = "your-password";
long lastConnectionTime = 0; 
const unsigned long postingInterval = 10L * 1000L;
int CO2 = 0;
WiFiClient client;

void setup() {
  Serial.begin(9600);
  delay(10);

  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);
  
    while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

}

void loop() {
  if (client.available()) {
    char c = client.read();
    Serial.write(c);
  }
  if (millis() - lastConnectionTime > postingInterval) {
    CO2 = analogRead(0);
    httpRequest();
  }
}
void httpRequest() {
  // close any connection before send a new request.
  // This will free the socket on the WiFi shield
  client.stop();

  // if there's a successful connection:
  if (client.connect(thingSpeakAddress, 80)) {
   Serial.println("connected");
    // send the HTTP PUT request:
    client.print("GET http://api.thingspeak.com/update?key=UM4G5EH4QI4TPMGS&field1=");
    client.print(CO2);
    client.println(" HTTP/1.1");
    client.println("Host: api.thingspeak.com");
    //client.println("User-Agent: arduino-ethernet");
    client.println("Connection: close");
    client.println();

    // note the time that the connection was made:
    lastConnectionTime = millis();
  }
  else {
    // if you couldn't make a connection:
    Serial.println("connection failed");
  }
}

 

diger67
Offline
Зарегистрирован: 25.07.2015

В вопросе содержится ответ, какойто элемент находится вне зоны видимости. Т.е. обявлен как локальный, но не входит в зону видимости. В rel так и должно быть с кавычками?

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Добавь прототип функции где нибудь вверху:

void httpRequest();

diger67
Offline
Зарегистрирован: 25.07.2015

Andy пишет:

Добавь прототип функции где нибудь вверху:

void httpRequest();

Я не просматривал эту библиотеку, но есть такое подазрение что эта функция объявлена как privat и используется внутри самой библиотеки. А вот использовать ее в основном теле программы по этой причине нет возможности. В таком случае ее надо перекинуть в public.

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Nestor Mahno пишет:

Хочу отправлять данные на сервис ThingSpeak, при проверке скетча выдает ошибку: "'httpRequest' was not declared in this scope". Код привожу ниже.

Совершенно очевидно, что это не единственное сообщение об ошибке. У Вас не скомпилировалась функция и, соотевтсвенно, там где она используется - она считается необъявленной.

Потрудитесь пожалуйста привести сообщения компилятора полностью, всё, что он выдал.

Заодно разберитесь с использованием кавычек с строке 54.

Nestor Mahno
Offline
Зарегистрирован: 03.10.2015

ЕвгенийП пишет:

Совершенно очевидно, что это не единственное сообщение об ошибке. У Вас не скомпилировалась функция и, соотевтсвенно, там где она используется - она считается необъявленной.

Потрудитесь пожалуйста привести сообщения компилятора полностью, всё, что он выдал.

Заодно разберитесь с использованием кавычек с строке 54.

С кавычками все вроде бы нормально, просто все слетело при вставке кода.

Вот, что выдает компилятор:

Arduino: 1.6.7 (Windows 7), Плата:"Generic ESP8266 Module, Serial, 80 MHz, 40MHz, DIO, 9600, 512K (64K SPIFFS), ck"
 
C:\Users\Юрий\Documents\Arduino\Thingspeak_ESp8266_GET\Thingspeak_ESp8266_GET.ino: In function 'void loop()':
 
Thingspeak_ESp8266_GET:42: error: 'httpRequest' was not declared in this scope
 
exit status 1
'httpRequest' was not declared in this scope
 
 

 

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Делали то, что Вам советовал в посте №2?

Если делали и не помогло, давайте ТОТ скетч и ТО сообщение.

Также скажите какая у Вас версия IDE

Nestor Mahno
Offline
Зарегистрирован: 03.10.2015

ЕвгенийП пишет:

Делали то, что Вам советовал в посте №2?

Если делали и не помогло, давайте ТОТ скетч и ТО сообщение.

Также скажите какая у Вас версия IDE

Делал, вставлял "void httpRequest" выше "void loop", в остальном скетч не менял, на что компилятор отвечал:

Arduino: 1.6.7 (Windows 7), Плата:"Generic ESP8266 Module, Serial, 80 MHz, 40MHz, DIO, 9600, 512K (64K SPIFFS), ck"
 
Thingspeak_ESp8266_GET:35: error: expected initializer before 'void'
 
exit status 1
expected initializer before 'void'
 
 

 

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Nestor Mahno пишет:

ЕвгенийП пишет:

Делали то, что Вам советовал в посте №2?

Если делали и не помогло, давайте ТОТ скетч и ТО сообщение.

Также скажите какая у Вас версия IDE

Делал, вставлял "void httpRequest" выше "void loop", в остальном скетч не менял, на что компилятор отвечал:

Arduino: 1.6.7 (Windows 7), Плата:"Generic ESP8266 Module, Serial, 80 MHz, 40MHz, DIO, 9600, 512K (64K SPIFFS), ck"
 
Thingspeak_ESp8266_GET:35: error: expected initializer before 'void'
 
exit status 1
expected initializer before 'void'
 
Как, вот так, как пишете вставляли?
 
Вам же писали \, что перед loop нада вставить 
 
void httpRequest();
 
Как Вы вставляли?
 
И ещё, пожалуйста, если Вас просят показть скетч - делайте это. данное сообщение просто пустое. Его бу не было, если бы Вы выложили ТОТ скетч как я Вас просил.
 
Nestor Mahno
Offline
Зарегистрирован: 03.10.2015

ЕвгенийП пишет:

Как, вот так, как пишете вставляли?

Вам же писали \, что перед loop нада вставить 
 
void httpRequest();
 
Как Вы вставляли?
 
И ещё, пожалуйста, если Вас просят показть скетч - делайте это. данное сообщение просто пустое. Его бу не было, если бы Вы выложили ТОТ скетч как я Вас просил.
 

Черт побери! Заработало! Видимо, изначально как-то не так вставил "void httpRequest".

Спасибо за помощь!

#include <ESP8266WiFi.h>
char thingSpeakAddress[] = "api.thingspeak.com";
const char* ssid = "your-ssid";
const char* password = "your-password";
long lastConnectionTime = 0; 
const unsigned long postingInterval = 10L * 1000L;
int CO2 = 0;
WiFiClient client;

void setup() {
  Serial.begin(9600);
  delay(10);

  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);
  
    while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

}
void httpRequest();
void loop() {
  if (client.available()) {
    char c = client.read();
    Serial.write(c);
  }
  if (millis() - lastConnectionTime > postingInterval) {
    CO2 = analogRead(0);
    httpRequest();
  }
}
void httpRequest() {
  // close any connection before send a new request.
  // This will free the socket on the WiFi shield
  client.stop();

  // if there's a successful connection:
  if (client.connect(thingSpeakAddress, 80)) {
   Serial.println("connected");
    // send the HTTP PUT request:
    client.print("GET /update?key=UM4G5EH4QI4TPMGS&field1=");
    client.print(CO2);
    client.println(" HTTP/1.1");
    client.println("Host: api.thingspeak.com");
    //client.println("User-Agent: arduino-ethernet");
    client.println("Connection: close");
    client.println();

    // note the time that the connection was made:
    lastConnectionTime = millis();
  }
  else {
    // if you couldn't make a connection:
    Serial.println("connection failed");
  }
}