Saturday, March 17, 2018

Set-Top-Box Remote Configurations

Set-top-box infrared remote configuration files for LIRC (*.conf) and irplus Android app (*.irplus)

ABS-CBN TV Plus (Atlanta-DTH STB)


Geniric ISDB-T STB




Wednesday, September 13, 2017

DTLS Reverse Proxy

Lightweight DTLS reverse proxy server based on tinydtls and libev.

https://github.com/julznc/dtlsproxy

Saturday, May 6, 2017

ATtiny IR Remote

ATtiny2313 Infrared Sender

parts:
  • ATtiny2313 @4MHz (internal oscillator)
  • IR LED (series with 220-ohm resistor)
  • Tact switches
  • 3.7V lithium ion battery & Capacitor




avr-gcc (main.c) code:


References:
ESP8266 IR Remote
z3t0/Arduino-IRremote
ATtiny Low Power

Friday, May 5, 2017

ESP8266 IR Remote

Control your appliances (e.g. TV and AV systems) via WiFi+IR.




Arduino code:


References:
markszabo/IRremoteESP8266
Sony IR codes
Sony SIRC protocol





Sunday, January 29, 2017

WiFi RGB Matrix

Here's a DIY flexible 36x8 RGB-LED-matrix controlled via WiFi connection using an ESP8266 module.



Arduino Code: julznc/wifi_rgb_matrix


Assembly:

References:
NeoPixelBus - for interfacing WS2812 LEDs to ESP8266 controller
Adafruit-GFX-Library - with font library for displaying texts
LED Matrix Studio - for creating bitmap images

Saturday, June 11, 2016

ESP8266 PWM Android Controller

Control ESP8266 PWM outputs* with Android.

Android app: play.google/wifipwm
Android src: github/esp_wifi_pwm

demo:


ESP8266 init.lua :
wifi.setmode(wifi.STATION)
wifi.sta.config("WIFI_SSID","WIFI_PASSWORD")

local GP0 = 3
local GP2 = 4
local port = 3456

print(wifi.sta.getip())

srv=net.createServer(net.UDP)
srv:on("receive", function(cli, rcv)
    --print(rcv)
    rx={}
    for i, s in string.gmatch(rcv, "(%w+)=(%w+)") do
      rx[i]=s
      --print(i, rx[i])
    end
    if rx.d0 then
      pwm.setduty(GP0,rx.d0)
      --print("GP0 duty",rx.d0)
    elseif rx.d2 then
      pwm.setduty(GP2,rx.d2)
      --print("GP2 duty",rx.d2)
    elseif rx.f0 and rx.c0 then
      pwm.setup(GP0,rx.f0,rx.c0)
      pwm.start(GP0)
      print("GP0 freq",rx.f0,"cycles", rx.c0)
    elseif rx.f2 and rx.c2 then
      pwm.setup(GP2,rx.f2,rx.c2)
      pwm.start(GP2)
      print("GP2 freq",rx.f2,"cycles", rx.c2)
    end
    cli:send(rcv)
  end)
srv:listen(port)


*PWM outputs nodemcu pwm
  • pins GP0 and GP2
  • up to 1kHz only
  • 0-100%duty (note: 1023 cycles = 100% duty)

Saturday, May 14, 2016

ESP8266 and SHT1x Web Interface


Here's a *duino-less (*pi-less) simple project using ESP11 (ESP8266) Wifi Module and SHT10 humidity-temperature sensor.



init.lua:
wifi.setmode(wifi.STATION)
wifi.sta.config("WIFI_SSID","WIFI_PASSWORD")

local DAT = 4
local CLK = 3

function DL()
  gpio.write(DAT, gpio.LOW)
  gpio.mode(DAT, gpio.OUTPUT)
end

function DH()
  gpio.mode(DAT, gpio.INPUT)
  gpio.write(DAT, gpio.HIGH)
end

function CL()
  gpio.write(CLK, gpio.LOW)
end

function CH()
  gpio.write(CLK, gpio.HIGH)
end

function DR()
  gpio.mode(DAT, gpio.INPUT)
  return gpio.read(DAT)
end

function W8()
  for i = 1, 100 do
    tmr.delay(10000)
    if DR() == gpio.LOW then
      return true
    end
  end
  return false
end

function RB()
  local val = 0
  for i = 0, 7 do
    CH()
    val = val*2 + DR()
    CL()
  end
  return val
end

function shtread(cmd)
  DH() CH() DL() CL() CH() DH() CL()
  for i = 0, 7 do
    if bit.band(cmd, 2^(7-i))==0 then
      DL()
    else
      DH()
    end
    CH() CL()
  end
  CH() CL()
  if not W8() then
    return nil
  end
  DH()
  local val = RB()
  DH() DL() CH() CL() DH()
  val = val*256 + RB()
  DH() CH() CL()
  return val
end

page=[[<head><meta charset="utf-8"/>
<link href="http://projectproto.blogspot.com/favicon.ico" rel="icon"/>
<title>ESP+SHT</title></head>
<body><h1>ESP8266 and SHT1x</h1><h2 id="T">T??</h2><h2 id="H">H??</h2>
<script>
 function update(){
  var xrq = new XMLHttpRequest();
  xrq.onreadystatechange=function(){
   if (xrq.readyState==4 && xrq.status==200){
    var th=JSON.parse(xrq.responseText);
    var t0=th["t"], h0=th["h"];
    var t=(t0*0.01)-39.7;
    var hl=(0.0367*h0)+(-0.0000015955*h0*h0)-2.0468;
    var h=(t-25.0)*(0.01+(0.00008*h0))+hl;
    document.getElementById("T").innerHTML="Temperature: "+t.toFixed(2)+"&deg;C";
    document.getElementById("H").innerHTML="Humidity: "+h.toFixed(2)+"%";}
  }
  xrq.open("GET","/get/sht",true);
  xrq.overrideMimeType("application/json");
  xrq.send(null);
 }setInterval(update, 1000);
</script></body>]]

srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
  conn:on("receive", function(client,request)
    local buf = "";
    local _, _, mtd, path, _ = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
    if(mtd == nil)then
      _, _, mtd, path = string.find(request, "([A-Z]+) (.+) HTTP");
    end
    if path == "/" then
      buf = buf..page
    elseif path == "/get/sht" then
      t = shtread(3)
      h = shtread(5)
      if (t ~= nil and h ~= nil) then
        buf = buf.."{\"t\":"..t..", \"h\":"..h.."}"
      end
    end
    client:send(buf)
    client:close()
    collectgarbage()
  end)
end)





References:
ESP8266 Web Server Tutorial
Github esp8266 sht10
e-Gizmo ESP11 kit
ESP8266 wiki
NodeMCU firmware 
NodeMCU http server