Sangat jarang saya menulis blog setelah youtube nya duluan saya upload, jadi mungkin terbawa perasaan kehilangan teman yang sering bikin vlog, jadi beberapa hari belakangan saya rajin mengunggah video tutorial. Bahasan yg di tampilkan adalah mengenai cara menulis data dan menampilkan grafik dari Arduino ke microsoft excel, walau diluaran sana sudah ada tools langsung jadi tapi kini saya bahas lebih mudah menggunakan bantuan python / xlwings. Jadi dengan tutorial kali ini maka tidak susah-susah lagi menggunakan mysql+php pada windows (xamp) cukup excel aja.
Sensor sejuta umat DHT11 mungkin paling sering dibahas dimana-mana termasuk pada blog ini dimana untuk DHT11 vs MQTT sudah pernah saya bahas di :http://www.aisi555.com/2019/10/iot-lebih-lanjut-dengan-mqtt.html , jadi kali ini saya anggap pembaca sudah paham cara mengirim data MQTT nya. Kita akan lebih ke library python nya yang saya gunakan yaitu XLWINGS.
import xlwings as xw #library
wb = xw.Book('Book1.xlsx') #nama file excel
sht = wb.sheets['coba'] #nama sheets
sht.range('C1').value= 10
sht.range('C2:C10').value='aku menulis'
for x in range(1,50):
a='A'+str(x)
b='B'+str(x)
sht.range(a).value= x*3
sht.range(b).value= x*2
xlwings merupakan library paling bagus menurut saya kalau dilihat dari segi metode penulisannya yang langsung saat excel terbuka, jadi sangat cocok untuk menampilkan grafik realtime dari pengukuran DHT11. Script dari wemos-esp8266-wifi-mqtt yang saya gunakan seperti berikut :
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include "DHT.h"
const char *ssid = "myIOT"; //ubah sesuai wifi anda
const char *pass = "selaluterhubung";
//broker gratisan hivemq.com
const char *mqtt_server = "broker.hivemq.com";
const int mqtt_port = 1883;
const char *mqtt_user = "";
const char *mqtt_pass = "";
const char *mqtt_client_name = "ahocool445566";
//inisialisasi DHT
#define DHTPIN 5
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
WiFiClient wclient;
PubSubClient client(wclient);
#define TOPIKDHT "/test/dht11" //topik yang digunakan
//koneksi wifi
void setupwifi()
{
if (WiFi.status() != WL_CONNECTED) {
Serial.print("Connecting to Wifi: ");
Serial.print(ssid);
Serial.println("...");
WiFi.begin(ssid, pass);
if (WiFi.waitForConnectResult() != WL_CONNECTED)
return;
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
}
void setup() {
Serial.begin(9600); //serial monitoring
setupwifi();
client.setServer(mqtt_server, mqtt_port); // server mqtt
dht.begin(); //mulai dht
}
void kirim(String kata) //publish ke topik
{
Serial.println("publish to topic: " );
Serial.print(TOPIKDHT);
Serial.print(" : ");
Serial.println(kata);
char message_buff[kata.length() + 1];
kata.toCharArray(message_buff, kata.length() + 1);
client.publish(TOPIKDHT,message_buff);
}
void reconnectmqtt() //konek mqtt lagi jika putus
{
Serial.println("Connecting to MQTT server..");
if (client.connect(mqtt_client_name,mqtt_user, mqtt_pass)) {
Serial.println("Connected to MQTT server");
} else {
Serial.println("Could not connect to MQTT server");
}
}
void loop() {
if (!client.connected()) //cek koneksi mqtt
{
reconnectmqtt();
}
//baca suhu dan kelembaban
float h = dht.readHumidity();
float t = dht.readTemperature();
// Cek jika pembacaan sensor benar lalu kirim
if (isnan(h) || isnan(t)) {
Serial.println(F("Failed to read from DHT sensor!"));
}
else{
//kirim ke serial monitoring
Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F("% Temperature: "));
Serial.print(t);
Serial.print(F("°C "));
//kirim ke mqtt data "suhu,kelembaban"
kirim( String(t) + ","+ String(h) );
}
delay(5000); //delay pengiriman mqtt
}
import paho.mqtt.client as mqtt #library mqtt
import xlwings as xw #library menulis excel
wb = xw.Book('Book1.xlsx') #nama book/file excel
sht = wb.sheets['data'] #nama sheets
row = 1
########## menulis ke excel #########
def to_excel(data):
print(data)
datae = data.split(",") #bikin list delim koma
global row #ini reset row kembali ke 2
if row == 51:
row=2
else:
row=row+1 #increment row tiap ada data masuk
rowsuhu='A'+str(row) #kolom suhu
rowhumi='B'+str(row) #kolom kelembaban
sht.range(rowsuhu).value= float(datae[0]) #tulis suhu
sht.range(rowhumi).value= float(datae[1]) #tulis kelembaban
############ call back pesan mqtt masuk ##########
def on_message(client, userdata, message):
print("message received " ,str(message.payload.decode("utf-8")))
print("message topic=",message.topic)
print("message qos=",message.qos)
print("message retain flag=",message.retain)
to_excel(str(message.payload.decode("utf-8"))) #tulis ke excel
########################################
broker_address="broker.hivemq.com" #broker mqtt
broker_port=1883
broker_user=""
broker_pass=""
print("creating new instance")
client = mqtt.Client("P1") #create new instance
client.on_message=on_message #attach function to callback
client.username_pw_set(broker_user,broker_pass)
print("connecting to broker")
client.connect(broker_address,broker_port) #connect to broker
#start the loop
print("Subscribing to topic","/test/dht")
client.subscribe("/test/dht11")
client.loop_forever()
Ini cocok digunakan untuk sensor yang jarak jauh dan ingin ditampilkan sebagai monitoring langsung dan karena excel umum digunakan maka pengaturan tampilannya dapat disesuaikan dengan mudah. Jika alat yang dimonitoring letaknya dekat maka cukup menggunakan serial port dan akan dibahas pada tulisan selanjutnya.
#daring #daringadalah daring adalah mpls #sekolah #guru #google classroom google classroom sekolah online guru kelas zoom webcam
0 komentar:
Posting Komentar