ESP-01 모듈로 IoT연습
지난번에 이어
두개의 다이얼로 LED의 PWM 제어
한개는 미사용이고 기능 시험만 해봄.
http://diyworld.tistory.com/93?category=936954
참조
jQuery plugin 'Kontrol' : http://anthonyterrien.com/kontrol/
소스화일
ESP8266_IoT_pwmLEDknotrol2.zip
작동화면
ESP-01 모듈 소스 스케치
// ============================================================================================ // 외부에서 ESP모듈에 연결된 LED를 그래픽으로 밝기 조절 : PWM at GPIO 2 // Demonstrates realtime LED PWM value update without page refresh // 'index.h' 화일과 필요한 Jquery & Knotrol.js 화일은 'data' 폴더 안에있다. (SPIFFS로 업로드) // 주의 : SPIFFS로 업로드 할때 'Serial monitor' 끌것. 올라간 화일은 크기가 좀 커진다. // ============================================================================================ // 참조 사이트 : https://circuits4you.com/2018/03/10/esp8266-jquery-and-ajax-web-server/ // jQuery plugin 'Knotrol' : http://anthonyterrien.com/kontrol/ // https://stackoverflow.com/questions/15906610/how-to-access-x-and-y-values-from-a-jquery-xy-pad // ============================================================================================ /* ESP8266 SPIFFS HTML Web Page with JPEG, PNG Image * https://circuits4you.com */ // ============================================================================================ #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <FS.h> // Include File System Headers // ============================================================================================ const char* htmlfile = "/index.html"; // saved in SPIFFS const char *ssid = "iptimexxxx"; // WiFi Connection configuration const char *password = "xxxxxxxx"; // ============================================================================================ #define LED 2 // LED on GPIO 2 ESP8266WebServer server(80); // ============================================================================================ void handleRoot(){ server.sendHeader("Location", "/index.html",true); // Redirect to our html web page server.send(302, "text/plane",""); } // ============================================================================================ void handlePWM(){ String PWM = server.arg("pwm"); int p = 1024 - (PWM.toInt())*10; analogWrite(LED,p); Serial.println("pwm=" + PWM); server.send(200, "text/plane",""); } // ============================================================================================ void handleADC(){ String ADC = server.arg("ADC"); // no action, just report value received Serial.println("ADC=" + ADC); server.send(200, "text/plane",""); } // ============================================================================================ void handleXY(){ // Not working : unable to get the position String XY = server.arg("padXY"); Serial.println("PadXY="+XY); // no action, just report value received server.send(200, "text/plane",""); } // ============================================================================================ void setup() { delay(1000); Serial.begin(115200); Serial.println(); pinMode(LED,OUTPUT); SPIFFS.begin(); // Initialize File System Serial.println("File System Initialized"); WiFi.begin(ssid, password); // Connect to your WiFi router Serial.println(""); while (WiFi.status() != WL_CONNECTED) { // Wait for connection delay(500); Serial.print("."); } Serial.println(""); // If connected, show IP address Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); // IP address assigned to your ESP server.on("/",handleRoot); // Initialize Webserver server.on("/setLED",handlePWM); // set pwm function is called from out index.html server.on("/readADC",handleADC); // Reads ADC function is called from out index.html server.on("/posXY",handleXY); // set padXY function is called from out index.html server.onNotFound(handleWebRequests); // Set setver all paths are not found so we can handle as per URI server.begin(); } // ============================================================================================ void loop() { server.handleClient(); } // ============================================================================================ void handleWebRequests(){ if(loadFromSpiffs(server.uri())) return; String message = "File Not Detected\n\n"; message += "URI: "; message += server.uri(); message += "\nMethod: "; message += (server.method() == HTTP_GET)?"GET":"POST"; message += "\nArguments: "; message += server.args(); message += "\n"; for (uint8_t i=0; i<server.args(); i++){ message += " NAME:"+server.argName(i) + "\n VALUE:" + server.arg(i) + "\n"; } server.send(404, "text/plain", message); Serial.println(message); } // ============================================================================================ bool loadFromSpiffs(String path){ String dataType = "text/plain"; if(path.endsWith("/")) path += "index.htm"; if(path.endsWith(".src")) path = path.substring(0, path.lastIndexOf(".")); else if(path.endsWith(".html")) dataType = "text/html"; else if(path.endsWith(".htm")) dataType = "text/html"; else if(path.endsWith(".css")) dataType = "text/css"; else if(path.endsWith(".js")) dataType = "application/javascript"; else if(path.endsWith(".png")) dataType = "image/png"; else if(path.endsWith(".gif")) dataType = "image/gif"; else if(path.endsWith(".jpg")) dataType = "image/jpeg"; else if(path.endsWith(".ico")) dataType = "image/x-icon"; else if(path.endsWith(".xml")) dataType = "text/xml"; else if(path.endsWith(".pdf")) dataType = "application/pdf"; else if(path.endsWith(".zip")) dataType = "application/zip"; File dataFile = SPIFFS.open(path.c_str(), "r"); if (server.hasArg("download")) dataType = "application/octet-stream"; if (server.streamFile(dataFile, dataType) != dataFile.size()) { } dataFile.close(); return true; } // ============================================================================================ // ============================================================================================
ESP-01의 SPIFFS 영역에 올라간 "index.html" 화일 :
Tools-> ESP8266 Sketch Data Upload 기능으로 ESP-01의 SPIFFS에 올림
<!DOCTYPE html>
<html> <!-- 다이얼은 작동, 단 패드는 웹에선 작동하나 변수 전달 못함 -->
<head>
<title>jQuery Kontrol</title>
<script src="jquery.min.js"></script>
<script src="jquery.kontrol.js"></script>
<script>
$(function() {
var $all = $(".dial1, .dial2, .pad")
, $body = $("body");
$(".dial").dial({
fgColor:"#222222"
, bgColor:"#EEEEEE"
, thickness : .3
}).css({display:'inline',padding:'0px 10px'});
var skins = {
skin0 : {
kontrol : {
fgColor:"#87CEEB"
, bgColor:"#EEEEEE"
}
, rack : {
"background-color":"#FFFFFF"
, "color":"#87CEEB"
}
}
, skin1 : {
kontrol : {
fgColor:"#222222"
, bgColor:"#EEEEEE"
}
, rack : {
"background-color":"#FFFFFF"
, "color":"#222222"
}
}
};
var changeSkin = function(skin) {
$body.css(skin.rack);
$all.trigger(
"configure"
, skin.kontrol
);
}
$('#skin').bind(
'change'
, function(e) {
changeSkin(skins[$(this).find('option:selected').val()]);
}
);
$('#displayPrevious').bind(
'change'
, function(e) {
$all.trigger("configure", {displayPrevious:parseInt($(this).find('option:selected').val())});
}
);
$('#cursor').bind(
'change'
, function(e) {
$all.trigger("configure", {cursor:parseInt($(this).find('option:selected').val())});
}
);
$(".height").bind(
'click'
, function(e) {
$all.trigger("configure", {height:100});
}
);
});
</script>
<style>
body{
padding: 0;
margin: 0;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-weight: 300;
text-rendering: optimizelegibility;
}
p{font-size: 30px; line-height: 30px}
div.demo{text-align: center; width: 300px; float: left}
div.demo > p{font-size: 20px}
.rack{font:bold 14px;}
.opt{
background:#FFF;
-webkit-box-shadow: inset 0 4px 4px -2px #888, inset 0 -4px 4px -2px #888;
-moz-box-shadow: inset 0 4px 4px -2px #888, inset 0 -4px 4px -2px #888;
box-shadow: inset 0 4px 4px -2px #888, inset 0 -4px 4px -2px #888;
}
.opt div{
padding:0px 10px;
color:#AAA; font:10px Arial;
}
select {
width: 100px;
padding: 5px;font-size: 16px;
border: 1px solid #ccc;height: 34px;
}
</style>
</head>
<body style="color:#222;background-color:#FFF">
<center>
<a href="https://diyworld.yistory.com" <p style="font-size:40px;">Diyworld</a><br>
<p style="font-size:40px;">
Demo: realtime LED PWM value update <br><br>
without page refresh and more things<br><br>
LED Fadding Input<br></p>
<div class="rack" style="padding:0px 20px">
<div style="float:left;width:400px;padding:30px">
<div style="margin-bottom:10px">PWM</div>
<input class="dial1" data-cursor=true data-width="400" data-height="400" data-thickness=.5 data-min=0 data-max=100 value="0">
</div>
<div style="float:left;width:400px;padding:30px">
<div style="margin-bottom:10px">ADC Value</div>
<input class="dial2" data-cursor=true data-width="400" data-height="400" data-thickness=.4 data-min=-100 data-max=100 data-angleOffset="-125" data-angleArc="250" value="0">
</div>
</div>
<script>
$(".dial1").dial({
'change' : function (v) { console.log(Math.round(v,0));
$.ajax({url: "/setLED?pwm="+Math.round(v,0), success: function(result){
$("#div1").html(result);
}});
}
});
$(".dial2").dial({
'change' : function (v) { console.log(Math.round(v,0));
$.ajax({url: "/readADC?ADC="+Math.round(v,0), success: function(result){
$("#div1").html(result);
}});
}
});
</script>
</center>
</body>
</html>
'IoT_ESP8266' 카테고리의 다른 글
| ESP8266 AD8232 - ECG 로거 제작 (0) | 2020.02.23 |
|---|---|
| ESP-12 D1 mini OLED SD card (0) | 2020.01.22 |
| ESP-01 : 서버와 데이터 주고 받기 정리 (0) | 2019.01.14 |
| jQuery 사용하기 (0) | 2019.01.13 |
| ESP8266 - AP mode로 LED 원격제어 (0) | 2019.01.08 |