@andrey71
админю и учу C#, ASP.NET Core

Как управлять нагрузкой в ESP8266 при такой схеме подключения?

Добрый день, Радио-любители!
Подскажите пожалуйста, пытаюсь собрать на ESP8266-01 управление шаровым краном.
Вот по этой схеме:
5b2cd3cf261b1708004986.gif
Логика работы такая. После подачи напряжения, выходы GPIO0,GPIO2 в LOW.

После подачи команды на включение, GPIO0 на 5 сек переводиться в состояние HIGH, а затем опять в LOW.
Пока писал/отлаживал программу, на выходах были диоды – всё работало хорошо.(крана ещё нет)
Решил собрать схему – и получается следующая ситуация. При подаче напряжения, на коллекторах транзисторов (назовём их VT1 и VT2) +3.3в… А при подаче команды открыть/закрыть 0в.
Т.Е. Всё наоборот.
Как-то не логично получается…
Подскажите, как лучше изменить схему или переписать логику?

ЗЫ. Извините, если вопрос бестолковый… ESP два дня назад первый раз в руки взял…
Спасибо!

Логика:
--WiFi Settup
wifi.setmode(wifi.STATION)
local cfg={}
cfg.ssid="222"
cfg.pwd="111"
wifi.sta.config(cfg)
cfg = nil
collectgarbage()
--Set Pin mode
my_pin_nummber = 3
my_pin_nummber2 = 4
gpio.mode(my_pin_nummber, gpio.OUTPUT)
gpio.mode(my_pin_nummber2,gpio.OUTPUT)
local boolean kran_open = false

 
--Create HTTP Server
http=net.createServer(net.TCP)
 

 function gpio0_off()
   gpio.write(my_pin_nummber, gpio.LOW)
 end
 function zakrit_kran()
   if kran_open  == true then
   gpio.write(my_pin_nummber2, gpio.HIGH)
   tmr.alarm(1,5000, tmr.ALARM_SINGLE, function() gpio.write(my_pin_nummber2, gpio.LOW) end)
   kran_open = false
 else
   print('Kran ZAKRIT')
   end
   end
   
 function ShowKranStatus()
   local string s =''
   if kran_open == true then
     s = 'OPEN'
     return s
   else
     s = 'CLOSE'
     return s
   end
 end
 
   
 
function receive_http(sck, data)    
  local request = string.match(data,"([^\r,\n]*)[\r,\n]",1)
  if request == 'GET /on HTTP/1.1' then
    kran_open = true
    gpio.write(my_pin_nummber, gpio.HIGH)
    tmr.alarm(0,5000, tmr.ALARM_SINGLE, function() gpio.write(my_pin_nummber, gpio.LOW) end)
    --Максимальное значение 6870947
    tmr.register(2,6870947,tmr.ALARM_AUTO,zakrit_kran)
    tmr.start(2)
  end
  if request == 'GET /off HTTP/1.1' then
    --gpio.write(my_pin_nummber, gpio.LOW)
    kran_open = false
    gpio.write(my_pin_nummber2, gpio.HIGH)
    tmr.alarm(3,5000, tmr.ALARM_SINGLE, function() gpio.write(my_pin_nummber2, gpio.LOW) end)
    
  end  
 
  sck:on("sent", function(sck) sck:close() end)
   
  local response = "HTTP/1.0 200 OK\r\nServer: NodeMCU on ESP8266\r\nContent-Type: text/html\r\n\r\n"..
     "<html><title>NodeMCU on ESP8266</title><body>"..
     "<h1>NodeMCU on ESP8266</h1>"..
     "<hr>"..
     "<a href=\"on\">On</a>  ------  <a href=\"off\">Off</a>"..
     --"<p> KRAN OPEN TIME- "..tmr.now(2).."</p>"..
     "<p> KRAN OPEN ? - "..ShowKranStatus().." ! </p>"..
     "</body></html>"
  sck:send(response)
end
 
 
if http then
  http:listen(80, function(conn)
    conn:on("receive", receive_http)
  end)
end
 
print("Started.")
  • Вопрос задан
  • 1863 просмотра
Решения вопроса 1
NeiroNx
@NeiroNx
Программист
У вас схема где активный 0(LOW). Да и схема почему то неполная. Непонятно чем управляют транзисторы. По правилам схемотехники в нагрузках всегда комутируется GND через npn транзистор или мосфет, а положительный провод при этом может быть не обязательно 3.3в.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы