STM32F103C Controlling Relay Via ESP8266 Wifi Module
/ 13:39
Introducing
Teknologi
mobile yang terus berkembang semakin memudahkan dalam urusan berkomunikasi data
dengan adanya teknologi jaringan tanpa kabel (wireless) ini, kita cukup
menggunakan paket data dari operator selular atau menggunakan hotspot wifi yang
tersedia di lingkungan sekitar kita untuk melakukan komunikasi.
Betapa luar biasanya perkembangan teknologi ini, karena setiap orang memungkinkan memiliki komputer genggam yang biasa di sebut smart phone yang didalamnya memiliki berbagai macam aplikasi yang dibutuhkan.
Dari kebiasaan orang yang selalu bermain-main dengan smart phonenya dikala waktu senggang dan berkomunikasi, setidaknya smart phone yang ada ditangan kita ini dapat dimanfaatkan untuk mengendalikan peralatan seperti anda menggunakan remote pada televisi.
Cukup praktis bukan?
Proyek pengembangan selanjutnya yaitu memanfaatkan smart phone untuk mengendalikan alat dengan menggunakan modul WIFI ESP01-8266 yang memiliki harga yang murah.
ESP8266 merupakan wifi module yang didalamnya sudah memiliki MCU ESP8266 yang dapat di program menggunakan arduino.
Tapi dalam hal ini kita tidak membahas pemograman ESP8266, jadi hanya memanfaatkan ESP8266 sebagai modul wifi saja yang dapat di akses dengan perintah AT command.
Perintah perintah yang digunakan pada proyek ini adalah perintah dasar untuk mengoperasikan modul wifi melalui komunikasi serial, perintah dasarnya adalah sebagai berikut:
Betapa luar biasanya perkembangan teknologi ini, karena setiap orang memungkinkan memiliki komputer genggam yang biasa di sebut smart phone yang didalamnya memiliki berbagai macam aplikasi yang dibutuhkan.
Dari kebiasaan orang yang selalu bermain-main dengan smart phonenya dikala waktu senggang dan berkomunikasi, setidaknya smart phone yang ada ditangan kita ini dapat dimanfaatkan untuk mengendalikan peralatan seperti anda menggunakan remote pada televisi.
Cukup praktis bukan?
Proyek pengembangan selanjutnya yaitu memanfaatkan smart phone untuk mengendalikan alat dengan menggunakan modul WIFI ESP01-8266 yang memiliki harga yang murah.
ESP8266 merupakan wifi module yang didalamnya sudah memiliki MCU ESP8266 yang dapat di program menggunakan arduino.
Tapi dalam hal ini kita tidak membahas pemograman ESP8266, jadi hanya memanfaatkan ESP8266 sebagai modul wifi saja yang dapat di akses dengan perintah AT command.
Perintah perintah yang digunakan pada proyek ini adalah perintah dasar untuk mengoperasikan modul wifi melalui komunikasi serial, perintah dasarnya adalah sebagai berikut:
No
|
Command
|
Deskripsi
|
1
|
AT+RST
|
Mereset modul ESP01
|
2
|
AT+CWMODE
|
Mengaktifkan ESP01 menjadi AP,
STATION, AP-STATION
|
3
|
AT+CWSAP
|
Memberi nama SSID, Kunci Keamanan,
Jenis Kunci, Channel Frekuensi, dan Jenis sistem keamanan yang dipakai
|
4
|
AT+CIPMUX
|
Konfigurasi perangkat sebagai single koneksi
atau multi koneksi
|
5
|
AT+CIPSERVER
|
Membuka koneksi port yang dibuat,
misal port 80 untuk webserver
|
6
|
AT+CIPSEND
|
Mengirim data yang akan dikirim,
dalam hal ini adalah halaman berupa tag html
|
7
|
AT+CIPCLOSE
|
Menutup koneksi apa bila telah
dilakukan pengiriman data
|
Lebih lengkap belajar mengenai AT Command anda
dapat membacanya pada link disini https://www.espressif.com/sites/default/files/documentation/4a-esp8266_at_instruction_set_en.pdf
Melalui
perintah-perintah AT-COMMAND di atas maka cukuplah mudah mengkomunikasikan data dari MCU STM32F103 ke modul wifi hanya
dengan menggunakan komunikasi serial.
Secara defaultnya ESP01 memiliki 2 versi, ada yang versi lama dengan default baudrate 9600 bps dan versi kedua memiliki default baud rate 115200bps. Sekarang modul yang anda miliki versi berapa? Anda cukup menyesuaikan saja.
Secara defaultnya ESP01 memiliki 2 versi, ada yang versi lama dengan default baudrate 9600 bps dan versi kedua memiliki default baud rate 115200bps. Sekarang modul yang anda miliki versi berapa? Anda cukup menyesuaikan saja.
Bill Of Material
- Board STM32F103C Blue Pill
- Board ESP01-8266 Pin Out 6
- Bread Board 400 dot point
- 4 Channel Relay Module SMD
- Dan beberapa kabel Jumper Female to Male, dan Male to Male
Circuit Wiring
Tabel Pin Koneksi
ESP8266
|
STM32
|
VCC
|
3.3V
|
GND
|
G
|
CH_PD
|
3.3V
|
TX
|
PA3
|
RX
|
PA2
|
Program
//Define
Conversion Char to String
#define
FPSTR(pstr_pointer) (reinterpret_cast <const __FlashStringHelper
*>(pstr_pointer))
#define
F(string_literal) (FPSTR(PSTR(string_literal)))
#define
debug Serial
#define
LedPins1 PB6
#define
LedPins2 PB7
#define
LedPins3 PB8
#define
LedPins4 PB9
//
Buffer
#define
BUFFER_SIZE 512
//
communication serial to esp8266 via USART2
HardwareSerial
esp8266(USART2);
char
buffer[BUFFER_SIZE];
boolean
tmpPin;
boolean
tmpLogin;
//boolean
PinStatus[] = {4,5,6,7,8};
int
stsRelay;
//-------------
//
page constant save to flash memory with PROGMEM function
const
char http_OK[] PROGMEM =
"HTTP/1.0
200 OK\r\n"
"Content-Type:
text/html\r\n"
"Pragma:
no-cache\r\n\r\n";
const
char http_Found[] PROGMEM =
"HTTP/1.0
302 Found\r\n"
"Location:
/\r\n\r\n";
const
char http_Unauthorized[] PROGMEM =
"HTTP/1.0
401 Unauthorized\r\n"
"Content-Type:
text/html\r\n\r\n"
"<h3>401
Page Request Note Found...</h3>";
//------------
const
char homePage[] PROGMEM =
"<input name='button' type=submit
value='RELAY 1'><br><br>"
"<input name='button' type=submit
value='RELAY 2'><br><br>"
"<input name='button' type=submit
value='RELAY 3'><br><br>"
"<input name='button' type=submit
value='RELAY 4'><br><br>";
//------------------------
const
char pageStart[] PROGMEM =
"<html><html
lang ='en-us'>"
"<head
>"
"<meta
name ='viewport' content='width=device-width, initial-scale=1.0'>"
"<TITLE>Home
Controlling Lamp</TITLE>"
"</HEAD>"
"<BODY>"
"<CENTER>"
"<H1><font
color=\"blue\">Wireless Control</font></H1><hr
/>"
"<H3><font
color=\"red\">Arduino ESP8266 Web Server<br> For
Implementation IoT</font></H3>"
"<form>";
//------------------------
const
char pageEnd[] PROGMEM =
"</form>"
"Created by Hendrik Herdian
<br>blog: stm32projects.blogger.com"
"<br />"
"</CENTER>"
"</BODY>"
"</HTML>";
void
setup()
{
//
Setup Baud rate for debug
debug.begin(115200);
esp8266.begin(115200);
// your esp's baud rate might be different
//
Setup ESP8266 Mode
debug.println(sendData("AT+RST\r\n",1000));
// reset module
debug.println(sendData("AT+CWMODE=2\r\n",1000));
// configure as access point
debug.println(sendData("AT+CWSAP=\"WIFI_ESP8266\",\"12345678\",1,0\r\n",1000));
debug.println(sendData("AT+CIPMUX=1\r\n",1000));
// configure for multiple connections
debug.println(sendData("AT+CIPSERVER=1,80\r\n",1000));
// turn on server on port 80
debug.println(sendData("AT+CIFSR\r\n",1000));
// get ip address
//Setup
Pin arduino as output
pinMode(LedPins1,OUTPUT);
pinMode(LedPins2,OUTPUT);
pinMode(LedPins3,OUTPUT);
pinMode(LedPins4,OUTPUT);
digitalWrite(LedPins1,LOW);
digitalWrite(LedPins2,LOW);
digitalWrite(LedPins3,LOW);
digitalWrite(LedPins4,LOW);
}
void
loop()
{
int ch_id, packet_len;
char *data;
if(esp8266.available())
// check if the esp is sending a message
{
esp8266.readBytesUntil('\n', buffer,
BUFFER_SIZE);
if(strncmp(buffer, "+IPD,",
5)==0) {
// request: +IPD,ch,len:data
sscanf(buffer+5, "%d,%d",
&ch_id, &packet_len);
if (packet_len > 0)
{
// read debug until packet_len
character received
// start from :
data = buffer + 5;
while(*data != '/') data++;
data++;
debug.println(data);
delay(1000);
if (strncmp(data, "?button=RELAY+1
", 16) == 0)
{
tmpPin = digitalRead(LedPins1);
if
(tmpPin==false){digitalWrite(LedPins1,HIGH);}
else{digitalWrite(LedPins1,LOW);}
}
else if (strncmp(data,
"?button=RELAY+2 ", 16) == 0)
{
tmpPin = digitalRead(LedPins2);
if
(tmpPin==false){digitalWrite(LedPins2,HIGH);}
else{digitalWrite(LedPins2,LOW);}
}
else if (strncmp(data,
"?button=RELAY+3 ", 16) == 0)
{
tmpPin = digitalRead(LedPins3);
if
(tmpPin==false){digitalWrite(LedPins3,HIGH);}
else{digitalWrite(LedPins3,LOW);}
}
else if (strncmp(data, "?button=RELAY+4
", 16) == 0)
{
tmpPin = digitalRead(LedPins4);
if
(tmpPin==false){digitalWrite(LedPins4,HIGH);}
else{digitalWrite(LedPins4,LOW);}
}
else if (strncmp(data, "?GetStatus
", 11) == 0)
{
}
else if (strncmp(data, "?MainMenu
", 10) == 0)
{
}
else if (strncmp(data, "?LogOut
", 8) == 0)
{
}
// Insert the main page here or
index.html
pageSend(FPSTR(http_OK),ch_id);
pageSend(FPSTR(pageStart),ch_id);
pageSend(FPSTR(homePage),ch_id);
pageSend(FPSTR(pageEnd),ch_id);
delay(100);
closeConnection(ch_id);
clearSerialBuffer();
}}}}
String
sendData(String command, int timeout)
{
String response="";
esp8266.print(command); // send the read
character to the esp8266
long int time = millis();
while( (time+timeout) > millis())
{
while (esp8266.available())
{
char c = esp8266.read();
response +=c;
}
}
//debug.println(response);
return response;
}
void
clearSerialBuffer(void) {
while (esp8266.available() > 0) {
esp8266.read();
}
}
void
clearBuffer(void) {
for (int i =0;i<BUFFER_SIZE;i++ ) {
buffer[i]=0;
}
}
void
pageSend(String page, int ch_id )
{
int ii=0;
String cipSend = "AT+CIPSEND=";
cipSend += ch_id;
cipSend += ",";
cipSend += page.length();
cipSend +="\r\n";
sendData(cipSend,1000);
sendData(page,1000);
}
void
closeConnection(int ch_id){
String closeCommand =
"AT+CIPCLOSE=";
closeCommand+=ch_id; // append connection
id
closeCommand+="\r\n";
sendData(closeCommand,100);
}
Test & Result
Setelah
seluruhnya selesai, saatnya anda melakukan uji coba. Pertama ambil smartphone anda dan aktifkan wifi, jika pada koneksi wifi terdapat SSID nama board WIFI_ESP8266 maka lakukan koneksi dan kemudian akan diminta kunci keamanan, masukan saja 12345678.
Jika telah terkoneksi maka Smartphone anda telah mendapatkan alamat IP default dari modul ESP01 yaitu 192.168.4.1.
Langkah selanjutnya adalah buka browser dan ketikan pada kolom addresse url dengan alaamt IP default, dan selamat jika tampilan halaman web anda telah muncul di layar smart phone anda.
Sekarang anda dapat menekan tombol RELAY1 sampai RELAY4 untuk mengeraakan relay secara ON dan OFF.
Jika telah terkoneksi maka Smartphone anda telah mendapatkan alamat IP default dari modul ESP01 yaitu 192.168.4.1.
Langkah selanjutnya adalah buka browser dan ketikan pada kolom addresse url dengan alaamt IP default, dan selamat jika tampilan halaman web anda telah muncul di layar smart phone anda.
Sekarang anda dapat menekan tombol RELAY1 sampai RELAY4 untuk mengeraakan relay secara ON dan OFF.
Comments 0
EmoticonEmoticon