Administrator
			
			
			
				
			
			
				 
				Регистрация: 12.04.2010
				Адрес: Москва
				
				
					Сообщений: 9,618
				
				
				
				Вес репутации: 
9824  
				
				    
			 
	 
	
	
	
		
		
			
			
				 
				Управление RGB подсветкой из браузера 
			 
			 
			
		
		
		
			
			В праздники появилось свободное время и я решил сделать потолочную подсветку, управляемую из браузера
Сама потолочная подсветка, которая будет модернизироваться 
 
Схема подключения RGB Led подсветки к Wi-Fi модулю 
Wemos  
Резисторы на затворах 1500-200 оМ
Транзисторы MOSFET IRLU8259 или IRLR2905
 
	Код для модуля ESP8266. Что бы посмотреть нажмите на + 
	
	PHP код:
	
		
			
#include <ESP8266WiFi.h> #include <DNSServer.h> #include <ESP8266WebServer.h> // веб страница String webpage  =  "" "<!DOCTYPE html><html><head><title>RGB control</title><meta name='mobile-web-app-capable' content='yes' />" "<meta name='viewport' content='width=device-width' /></head><body style='margin: 0px; padding: 0px;'>" "<canvas id='colorspace'></canvas></body>" "<script type='text/javascript'>" "(function () {" " var canvas = document.getElementById('colorspace');" " var ctx = canvas.getContext('2d');" " function drawCanvas() {" " var colours = ctx.createLinearGradient(0, 0, window.innerWidth, 0);" " for(var i=0; i <= 360; i+=10) {" " colours.addColorStop(i/360, 'hsl(' + i + ', 100%, 50%)');" " }" " ctx.fillStyle = colours;" " ctx.fillRect(0, 0, window.innerWidth, window.innerHeight);" " var luminance = ctx.createLinearGradient(0, 0, 0, ctx.canvas.height);" " luminance.addColorStop(0, '#ffffff');" " luminance.addColorStop(0.05, '#ffffff');" " luminance.addColorStop(0.5, 'rgba(0,0,0,0)');" " luminance.addColorStop(0.95, '#000000');" " luminance.addColorStop(1, '#000000');" " ctx.fillStyle = luminance;" " ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);" " }" " var eventLocked = false;" " function handleEvent(clientX, clientY) {" " if(eventLocked) {" " return;" " }" " function colourCorrect(v) {" " return Math.round(1023-(v*v)/64);" " }" " var data = ctx.getImageData(clientX, clientY, 1, 1).data;" " var params = [" " 'r=' + colourCorrect(data[0])," " 'g=' + colourCorrect(data[1])," " 'b=' + colourCorrect(data[2])" " ].join('&');" " var req = new XMLHttpRequest();" " req.open('POST', '?' + params, true);" " req.send();" " eventLocked = true;" " req.onreadystatechange = function() {" " if(req.readyState == 4) {" " eventLocked = false;" " }" " }" " }" " canvas.addEventListener('click', function(event) {" " handleEvent(event.clientX, event.clientY, true);" " }, false);" " canvas.addEventListener('touchmove', function(event){" " handleEvent(event.touches[0].clientX, event.touches[0].clientY);" "}, false);" " function resizeCanvas() {" " canvas.width = window.innerWidth;" " canvas.height = window.innerHeight;" " drawCanvas();" " }" " window.addEventListener('resize', resizeCanvas, false);" " resizeCanvas();" " drawCanvas();" " document.ontouchmove = function(e) {e.preventDefault()};" " })();" "</script></html>" ; ////////////////////////////////////////////////////////////////////////////////////////////////// #define red_pin 5 #define green_pin 2 #define blue_pin 4 const  char  * ssid  =  "RGB-control" ;  // точка доступа АР const  byte DNS_PORT  =  53 ; IPAddress apIP ( 192 ,  168 ,  1 ,  1 );  //IP адрес АР DNSServer dnsServer ;         // ESP8266WebServer webServer ( 80 );   //ПОРТ АР // получем с веб страницы выбраный цвет void handleRoot ()  { String red  =  webServer . arg ( 0 ); String green  =  webServer . arg ( 1 ); String blue  =  webServer . arg ( 2 ); // конвертируем и ШИМ-мим значения на RGB пинах analogWrite ( red_pin ,  red . toInt ()); analogWrite ( green_pin ,  green . toInt ()); analogWrite ( blue_pin ,  blue . toInt ()); webServer . send ( 200 ,  "text/html" ,  webpage ); } ////////////////////////////////////////////////////////////////////////////////////////////////// void setup ()  { pinMode ( red_pin ,  OUTPUT );  // R pinMode ( green_pin ,  OUTPUT );  // G pinMode ( blue_pin ,  OUTPUT );  // B analogWrite ( red_pin ,  512 ); analogWrite ( green_pin ,  512 ); analogWrite ( blue_pin ,  512 ); delay ( 1000 ); //Запускаем WiFi AP и сервер WiFi . mode ( WIFI_AP ); WiFi . softAPConfig ( apIP ,  apIP ,  IPAddress ( 255 ,  255 ,  255 ,  0 )); WiFi . softAP ( ssid ); dnsServer . start ( DNS_PORT ,  "rgb-control" ,  apIP ); webServer . on ( "/" ,  handleRoot );  //веб страница webServer . begin ();   //запуск сервера } ////////////////////////////////////////////////////////////////////////////////////////////////// void loop ()  { dnsServer . processNextRequest (); webServer . handleClient (); } 
  
 
		
	
 [свернуть]
 
 
Веб страница в браузере моего смартфона выглядит так:
 
Видео тестирования подсветки на макетке