Raspberry pi와 Node-RED를 사용하여 스마트 폰을 리모컨으로 만들 때까지의 이야기

TV나 에어컨, 실링 라이트 등의 리모컨이 늘어나고, 사용하고 싶을 때에 손에 없거나 하는 것이 많아졌기 때문에, Raspberry pi를 사용해 집안의 리모컨을 집약해 보았습니다.

PC나 스마트폰의 브라우저로부터 조작할 수 있도록 하는 것을 목적으로 하고 있습니다.
javascript→Node-Red→python의 순서로 리모컨 조작의 커멘드가 흘러가는 설계로 합니다만, Node-Red에 UI 전부 갖게 해도 좋았을지도.

준비한 것


  • Raspberry pi 2 Model B+
  • 적외선 LED, 적외선 수광 소자 또는 N 채널 FET.

    →에어컨의 조작한 결과, 온도 내려갔는지를 확인할 수 있으면 좋네요. 그래서 TI의 SensorTag (CC2650)를 사용하여 온도 측정도 했으므로 별도로 쓰고 싶다. 그 때의 참고 기사.

    SensorTag에서 측정한 온도, 습도 등을 Raspberry Pi3를 통해 Ambient로 보내 그래프화
    htps : // m / am Bien t / ms / 9b74bc8627c79 Aee cb0

    RPi 리모컨화까지의 이야기



    저렴한 스마트 리모컨을 만드는 방법
    htps : // m / kjg / ms / 6b8 a f53421 54b62c9

    여기 읽고 여러 가지 준비가 끝난다.
    아래와 같이 커맨드 라인으로부터 기기의 조작을 할 수 있게 되어 있을 것
    $ python3 irrp.py -p -g17 -f codes light:on
    

    덧붙여 점등 회로에 대해서는 수중에 있던 Nch의 2SK2232를 사용해 이런 느낌으로 했다

    (※) R1에 대해서는 LED의 부하 전류 생각해 적절한 값으로 해주세요.

    Node-Red를 사용하여 irrp.py를 두드리는



    irrp.py의 인수 중 다음 부분에 대해 웹 프런트 엔드에서 POST에서 받아 실행하는 흐름을 만듭니다.
    $ python3 irrp.py -p -g17 -f codes <このぶぶん!>
    

    결과, 이런 느낌의 흐름이 되었다



    바쁜 사람들을 위해 내보낸 흐름 : htps : // 기주 b. 이 m/n c30mtd/r 삐-레-d-우-b-레모테콘 t-ro-r/b-b/마s로 r/그래서--d f w/f w. j 그런

    웹 화면에서 Node-Red 흐름으로 요청 보내기



    RPi에 Apache를 설정하고 웹 서버를 시작합니다.
    버튼 등을 배치하고 버튼을 누르면 POST하는 함수에 대한 인수로 설정됩니다.
    <button type="button" class="btn btn-primary" onclick="send_data('tv:power');">Power</button>
    

    POST하는 함수에 대해서는 이런 느낌
    function send_data(cmd)
    {
        console.log("send_data("+cmd+")");
        //json
        var json = 
        {
            "cmd":cmd
        };
    
    
        //
        // POST
        //          
        var xhrReq = new XMLHttpRequest();
        xhrReq.onreadystatechange = function() 
        {
            if (xhrReq.readyState == 4 && xhrReq.status == 200) 
            {
                var retText = xhrReq.responseText;
                var ret = JSON.parse(retText);
    
                console.log(retText);
            }
            else if (xhrReq.readyState == 4 && xhrReq.status != 200) 
            {
                alert("失敗("+xhrReq.status+"");
            }
        };
        xhrReq.open("POST", "<RPiのIPアドレス>:1880/send", true);
        xhrReq.setRequestHeader("Content-Type", "text/json");
        xhrReq.send(JSON.stringify(json));
    }
    

    그 외 소스 등은 이쪽↓
    htps : // 기주 b. 코 m / n c30 mtd / r 피 - 레드 d 우 ぇ b 레모 테콘 t 롯 r
  • 좋은 웹페이지 즐겨찾기