ใครเก่งภาษา C++ ใน Arduino IDE ช่วยหน่อยครับพอดีผมได้ลองทำเครื่องวัดฝุ่น PM2.5 ใช้เอง ตามบทความบนเว็บบทความหนึ่ง แต่ติดปัญหา!!
เริ่มจากผมได้ทำตามบทความการทำเครื่องวัดฝุ่น PM2.5 ใช้เอง แต่ติดอยู่1บรรทัดไม่รู้เป็นเพราะอะไรพึ่งฝึกเล่นครับ
จากเว็ปนี้ครับ www.medium.com/@modcumram/การทำเครื่องวัดฝุ่น-pm2-5-15321bcf5e08
มันขึ้นสีแดงในโคดตรง pm25senses mydevice; ที่ฟ้องด้านล่างขึ้นว่า 'pm25senses' does not name a type ใครพอรู้ช่วยบอกหน่อยครับ
code Arduino IDE
Code (C#)
#include "PMS.h"
#include <ESP8266WiFi.h>
#include "ThingSpeak.h"
#include <ESP8266HTTPClient.h>
PMS pms(Serial);
PMS::DATA data;
unsigned long myChannelNumber = 25895; // thingspeak channel id จาก thingspeak
const char * myWriteAPIKey = "XXXXXXXXX"; // ได้มาจาก thingspeak
String pm25_;
String pm10_;
String response;
pm25senses mydevice;
const char* ssid = "xxxxxx"; //Set Wifi SSID
const char* password = "xxxxxxx";//Set Wifi password
WiFiClient client;
void setup()
{
Serial.begin(9600);
pms.passiveMode(); // Switch to passive mode
WiFi.begin(ssid, password);
//Set WiFi mode
//You can choose between WIFI_AP, WIFI_STA, WIFI_AP_STA or WIFI_OFF
WiFi.mode(WIFI_STA);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
ThingSpeak.begin(client);
}
void loop()
{
pms.wakeUp();
delay(30000);
pms.requestRead();
Serial.println("Wait max. 1 second for read…");
if (pms.readUntil(data))
{
Serial.print("PM 1.0 (ug/m3): ");
Serial.println(data.PM_AE_UG_1_0);
Serial.print("PM 2.5 (ug/m3): ");
Serial.println(data.PM_AE_UG_2_5);
Serial.print("PM 10.0 (ug/m3): ");
Serial.println(data.PM_AE_UG_10_0);
}
else
{
Serial.println("No data.");
}
ThingSpeak.writeField(myChannelNumber, 1,data.PM_AE_UG_2_5, myWriteAPIKey);
delay(10000);
ThingSpeak.writeField(myChannelNumber, 2,data.PM_AE_UG_10_0, myWriteAPIKey);
pm25_ = String(data.PM_AE_UG_2_5*0.66); //จากการเทียบค่า Sensirion
pm10_ = String(data.PM_AE_UG_10_0*0.66); //จากการเทียบค่า Sensirion
HTTPClient http;
http.begin("http://cc039df5.ngrok.io/pm25.php");
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
int httpCode = http.POST("pm25="+ pm25_ +"&pm10=" + pm10_);
//Serial.println(httpCode);
if(httpCode == HTTP_CODE_OK)
{
Serial.println("Insert to database success !!!");
}
else
{
Serial.println("Error in HTTP request");
}
http.end();
delay(300000);
}
Tag : C
ประวัติการแก้ไข 2020-03-18 20:10:47 2020-03-18 20:12:16 2020-03-22 19:22:39
Date :
2020-03-18 20:08:55
By :
nuithestd
View :
1230
Reply :
3
ก่อนอื่นที่เขียนมาเรียกว่า ภาษา c/c++ ไม่ใช่ c#
การใช้คำสั่งแบบนี้
Code (C/C++)
pm25senses mydevice;
แปลว่า กำหนดหรือประกาศตัวแปรชื่อ "mydevice" ที่มี Type เป็น "pm25senses" แต่ว่า "pm25senses" ไม่ใช่ primitive data type จำเป็นต้องมีการนิยามหรือสร้าง Type ขึ้นมาก่อนจึงจะสามารถเรียกใช้งานได้...เนื่องจาก Type เจ้าปัญหายังไม่ได้ถูกนิยาม จึงคอมไพล์ไม่ผ่าน
วิธีแก้ Library pm25senses ทำได้โดย
ดาวโหลดไฟล์ pm25senses.h และ pm25senses.cpp มาไว้ในโฟลเดอร์โปรเจค
https://github.com/Isaranu/pm25senses/tree/master/src
แล้วเพิ่ม Header ไฟล์ในไฟล์ .ino ที่เขียนอยู่
Code (C/C++)
#include "PMS.h"
#include <ESP8266WiFi.h>
#include "ThingSpeak.h"
#include <ESP8266HTTPClient.h>
#include <pm25senses.h>
PMS pms(Serial);
PMS::DATA data;
//...ส่วนที่เหลือเหมือนเดิม
Date :
2020-03-18 20:37:40
By :
PhrayaDev
Load balance : Server 05