Arduino "Expected primary-expression before '.' Token" hatası

356463

Kilopat
Katılım
27 Temmuz 2020
Mesajlar
4.428
Makaleler
7
Çözümler
40
Arduino'da bu hatayı alıyorum. Kodda 2. kere bu hatayı aldım. İlkinde "class" adı olduğu için küçük yazmam lazımdı, yazdım. Ama bu sefer hata aldığım yer bir kütüphane ile alakalı olduğu için değiştirirsem bu sefer not defined hatası alıyorum. Yardımcı olursanız sevinirim.
 
Kodunu atabilir misin acaba?

Kod:
#include <ESP32Servo.h>
#include <WiFi.h>
#include <PubSubClient.h>

Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
Servo servo7;
int servo1Pin = 2;
int servo2Pin = 4;
int servo3Pin = 5;
int servo4Pin = 12;
int servo5Pin = 19;
int servo6Pin = 21;
int servo7Pin = 23;
int minUs = 500;
int maxUs = 2400;

const char* ssid = "MFA183";
const char* password = "08102007mfa";
const char* mqttServer = "****";
const int mqttPort = 11111;
const char* mqttUser = "********";
const char* mqttPassword = "*********";

String mesaj = "";
WiFiClient espClient;
PubSubClient client(espClient);

void setup()
{
pinMode(13, OUTPUT);
pinMode(16, OUTPUT);
pinMode(17, OUTPUT);
pinMode(18, OUTPUT);
pinMode(20, OUTPUT);
pinMode(24, OUTPUT);
pinMode(25, OUTPUT);
pinMode(3, OUTPUT);
pinMode(27, OUTPUT);
pinMode(28, OUTPUT);
pinMode(2, OUTPUT);
pinMode(1, OUTPUT);
Serial.begin(115200);

servo1.setPeriodHertz(50); // Standard 50hz servo.
servo2.setPeriodHertz(50); // Standard 50hz servo.
servo3.setPeriodHertz(50); // Standard 50hz servo.
servo4.setPeriodHertz(50);
servo5.setPeriodHertz(50);
servo6.setPeriodHertz(50);
servo7.setPeriodHertz(50);

Serial.begin(115200);
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("WİFİ AĞINA BAĞLANIYOR");
}

Serial.println("Wifi ağına bağlanıldı");

client.setServer(mqttServer, mqttPort);
client.setCallback(callback);

while (!client.connected()) {
Serial.println("MQTT Sunucusuna Bağlanıyor...");

if (client.connect("ESP32client", mqttUser, mqttPassword )) {

Serial.println("MQTT Sunucusuna bağlanıldı!");

} else {

Serial.print("Bağlantı Başarısız Oldu. ");
Serial.print(client.state());
delay(2000);

}
}

client.publish("espdenpcye", "Hello from ESP32");
client.subscribe("pcdenespye");
servo1.attach(servo1Pin, minUs, maxUs);
servo2.attach(servo2Pin, minUs, maxUs);
servo3.attach(servo3Pin, minUs, maxUs);
servo4.attach(servo4Pin, minUs, maxUs);
servo5.attach(servo5Pin, minUs, maxUs);
servo6.attach(servo6Pin, minUs, maxUs);
servo7.attach(servo7Pin, minUs, maxUs);
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Mesaj esp'ye ulaştı [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload);
mesaj += (char)payload;
}
}

void loop() {

}
//-----------------------------------------------------------------
void reconnect() {
// Loop until we're reconnected.
while (!client.connected()) {
Serial.print("MQTT Bağlantısı koptu.Yeniden deneniyor...");
// Attempt to connect.
if (client.connect("espClient")) {
Serial.println("Bağlandı..");
// Once connected, publish an announcement...
client.publish("espdenpcye", "hello world");
// ... and resubscribe.
client.subscribe("pcdenespye");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying.
delay(5000);
}
}
}

//-----------------------------------------------------------------

//Salon---------------------------
if (mesaj == "Salonac") {
digitalWrite(16, HIGH);
Serial.println("komut yerine getirildi");
delay(100);
}
if (mesaj == "Salonkapa") {
digitalWrite(16, LOW);
Serial.println("komut yerine getirildi");
delay(100);
}

//--------------------------------
//--------------------------------

mesaj = "";
}
//-----------------------------------------------------------------

Kod bu. Ancak şöyle bir saçmalık var. Ben bu kodla çalışan cihaz yaptım. Bal gibide çalışıyor hatta esP32 kartının içinde yüklü ve çalışır durumda. Ancak bu kodu IDE'de compile etmeyi denediğim zaman çalışmıyor :( Yeniden yükleme amacım MQTT sunucusunun bilgileri değişti. Onu yenileyeceğim.
 
Bu arada boşluk hatasına aldırmayın IDE'de böyle değil.
*Düzenleme: Şuanda en alttaki (if) bölgesinde sıkıntı veriyor. Hata:
expected unqualified-id before 'if' .
Bende de esP32 kartı var, bir bakacağım. @356463

Lokal mqtt sunucusu mu kullandın?

Hayır cloudmqtt ile 1-2 sene önce Free plan açmıştım. Şu an paralı ama o hesapta hala ücretsiz :)
 
Şu uzun "---------" işaretleri kullanmayın.
Hocam onlar karışıkları ayırmak içindi ama siliyorum hemen.

Hocam birde kartın IDE'de görünmesi için ek devre kartı linkim bu :

https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json
Bende de esP32 kartı var, bir bakacağım. @356463

Lokal mqtt sunucusu mu kullandın?

Hocam bir de şöyle bir saçmalık var. Dediğim gibi bu kod 1 yıl öncesine kadar çalışıyordu.
Hatta buraya yükledim kodu.
Bu kodda olmaması gereken hatalardan biri client.callback(callback) yazdığımda callback not defined hatası alıyordum. Callback fonksiyonunu Callback'i çağırdım yerin üstüne taşıdım hata çözüldü.
 
ESP8266 için olan kütüphaneleri ESP32 için kullanmamaya dikkat et, bu proje için değil genel olarak söylüyorum. :)

En alttaki if, void reconnct (); dışında kalmış, onu ekledim. Ayrıca void loop(); da boş, ama olabilir.

Bunu dener misin?

C-like:
#include <ESP32Servo.h>
#include <WiFi.h>
#include <PubSubClient.h>

Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
Servo servo7;
int servo1Pin = 2;
int servo2Pin = 4;
int servo3Pin = 5;
int servo4Pin = 12;
int servo5Pin = 19;
int servo6Pin = 21;
int servo7Pin = 23;
int minUs = 500;
int maxUs = 2400;

const char* ssid = "MFA183";
const char* password = "08102007mfa";
const char* mqttServer = "****";
const int mqttPort = 11111;
const char* mqttUser = "********";
const char* mqttPassword = "*********";

String mesaj = "";
WiFiClient espClient;
PubSubClient client(espClient);

void setup()
{
pinMode(13, OUTPUT);
pinMode(16, OUTPUT);
pinMode(17, OUTPUT);
pinMode(18, OUTPUT);
pinMode(20, OUTPUT);
pinMode(24, OUTPUT);
pinMode(25, OUTPUT);
pinMode(3, OUTPUT);
pinMode(27, OUTPUT);
pinMode(28, OUTPUT);
pinMode(2, OUTPUT);
pinMode(1, OUTPUT);
Serial.begin(115200);

servo1.setPeriodHertz(50); // Standard 50hz servo.
servo2.setPeriodHertz(50); // Standard 50hz servo.
servo3.setPeriodHertz(50); // Standard 50hz servo.
servo4.setPeriodHertz(50);
servo5.setPeriodHertz(50);
servo6.setPeriodHertz(50);
servo7.setPeriodHertz(50);

Serial.begin(115200);
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("WİFİ AĞINA BAĞLANIYOR");
}

Serial.println("Wifi ağına bağlanıldı");

client.setServer(mqttServer, mqttPort);
client.setCallback(callback);

while (!client.connected()) {
Serial.println("MQTT Sunucusuna Bağlanıyor...");

if (client.connect("ESP32client", mqttUser, mqttPassword )) {

Serial.println("MQTT Sunucusuna bağlanıldı!");

} else {

Serial.print("Bağlantı Başarısız Oldu. ");
Serial.print(client.state());
delay(2000);

}
}

client.publish("espdenpcye", "Hello from ESP32");
client.subscribe("pcdenespye");
servo1.attach(servo1Pin, minUs, maxUs);
servo2.attach(servo2Pin, minUs, maxUs);
servo3.attach(servo3Pin, minUs, maxUs);
servo4.attach(servo4Pin, minUs, maxUs);
servo5.attach(servo5Pin, minUs, maxUs);
servo6.attach(servo6Pin, minUs, maxUs);
servo7.attach(servo7Pin, minUs, maxUs);
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Mesaj esp'ye ulaştı [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload);
mesaj += (char)payload;
}
}

void loop() {

}

void reconnect() {
  // Loop until we're reconnected.
  while (!client.connected()) {
    Serial.print("MQTT Bağlantısı koptu.Yeniden deneniyor...");
    // Attempt to connect.
    if (client.connect("espClient")) {
      Serial.println("Bağlandı..");
      // Once connected, publish an announcement...
      client.publish("espdenpcye", "hello world");
      // ... and resubscribe.
      client.subscribe("pcdenespye");
    }
    
    else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying.
      delay(5000);
    }
  }


  if (mesaj == "Salonac") {
  digitalWrite(16, HIGH);
  Serial.println("komut yerine getirildi");
  delay(100);
  }
  if (mesaj == "Salonkapa") {
  digitalWrite(16, LOW);
  Serial.println("komut yerine getirildi");
  delay(100);
  }


mesaj = "";
}
 
ESP8266 için olan kütüphaneleri ESP32 için kullanmamaya dikkat et, bu proje için değil genel olarak söylüyorum. :)

En alttaki if, void reconnct (); dışında kalmış, onu ekledim. Ayrıca void loop(); da boş, ama olabilir.

Bunu dener misin?

C-like:
#include <ESP32Servo.h>
#include <WiFi.h>
#include <PubSubClient.h>

Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
Servo servo7;
int servo1Pin = 2;
int servo2Pin = 4;
int servo3Pin = 5;
int servo4Pin = 12;
int servo5Pin = 19;
int servo6Pin = 21;
int servo7Pin = 23;
int minUs = 500;
int maxUs = 2400;

const char* ssid = "MFA183";
const char* password = "08102007mfa";
const char* mqttServer = "****";
const int mqttPort = 11111;
const char* mqttUser = "********";
const char* mqttPassword = "*********";

String mesaj = "";
WiFiClient espClient;
PubSubClient client(espClient);

void setup()
{
pinMode(13, OUTPUT);
pinMode(16, OUTPUT);
pinMode(17, OUTPUT);
pinMode(18, OUTPUT);
pinMode(20, OUTPUT);
pinMode(24, OUTPUT);
pinMode(25, OUTPUT);
pinMode(3, OUTPUT);
pinMode(27, OUTPUT);
pinMode(28, OUTPUT);
pinMode(2, OUTPUT);
pinMode(1, OUTPUT);
Serial.begin(115200);

servo1.setPeriodHertz(50); // Standard 50hz servo.
servo2.setPeriodHertz(50); // Standard 50hz servo.
servo3.setPeriodHertz(50); // Standard 50hz servo.
servo4.setPeriodHertz(50);
servo5.setPeriodHertz(50);
servo6.setPeriodHertz(50);
servo7.setPeriodHertz(50);

Serial.begin(115200);
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("WİFİ AĞINA BAĞLANIYOR");
}

Serial.println("Wifi ağına bağlanıldı");

client.setServer(mqttServer, mqttPort);
client.setCallback(callback);

while (!client.connected()) {
Serial.println("MQTT Sunucusuna Bağlanıyor...");

if (client.connect("ESP32client", mqttUser, mqttPassword )) {

Serial.println("MQTT Sunucusuna bağlanıldı!");

} else {

Serial.print("Bağlantı Başarısız Oldu. ");
Serial.print(client.state());
delay(2000);

}
}

client.publish("espdenpcye", "Hello from ESP32");
client.subscribe("pcdenespye");
servo1.attach(servo1Pin, minUs, maxUs);
servo2.attach(servo2Pin, minUs, maxUs);
servo3.attach(servo3Pin, minUs, maxUs);
servo4.attach(servo4Pin, minUs, maxUs);
servo5.attach(servo5Pin, minUs, maxUs);
servo6.attach(servo6Pin, minUs, maxUs);
servo7.attach(servo7Pin, minUs, maxUs);
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Mesaj esp'ye ulaştı [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload);
mesaj += (char)payload;
}
}

void loop() {

}

void reconnect() {
  // Loop until we're reconnected.
  while (!client.connected()) {
    Serial.print("MQTT Bağlantısı koptu.Yeniden deneniyor...");
    // Attempt to connect.
    if (client.connect("espClient")) {
      Serial.println("Bağlandı..");
      // Once connected, publish an announcement...
      client.publish("espdenpcye", "hello world");
      // ... and resubscribe.
      client.subscribe("pcdenespye");
    }
  
    else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying.
      delay(5000);
    }
  }


  if (mesaj == "Salonac") {
  digitalWrite(16, HIGH);
  Serial.println("komut yerine getirildi");
  delay(100);
  }
  if (mesaj == "Salonkapa") {
  digitalWrite(16, LOW);
  Serial.println("komut yerine getirildi");
  delay(100);
  }


mesaj = "";
}
Hocam normalde void loop DHT11'in okuması için var. Orda DHT'den gelen veriyi publish ediyordum.

Denedim ancak böyle bir hata aldım:
cast from 'byte* {aka unsigned char*}' to 'char' loses precision [-fpermissive],

Hocam birde zaten void reconnect dışında olmalı çünkü reconnect'de bağlantı kopması durumda yeniden bağlanıyoruz. Hocam sanırım GitHub'daki koda bakarsanız daha doğru konuşabiliriz. Burda satır atlamalarını sanırım almıyor forum. İsterseniz INO dosyasınıda verebilirim.
 
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Geri
Yukarı