Esempio n. 1
0
 private static void CheckAndOpenConnection(Esp8266WIFI esp8266Client)
 {
     if (esp8266Client.IPAddress != "0.0.0.0")
     {
         esp8266Client.OpenPassthroughConnection(_connection.Target, 10000);
     }
 }
Esempio n. 2
0
        private static void SendDeviceInfo(Esp8266WIFI esp8266Client)
        {
            bool   pin1State = _pin1.Read() == GpioPinValue.High ? true : false;
            string value     = "{\"id\":\"E5363BAF-2C1B-4C6C-A92B-41A8DAFFF870\", " +
                               "\"key\":\"E5363BAF-2C1B-4C6C-A92B-41A8DAFFF870\", " +
                               "\"analogs\":[]," +
                               "\"digitals\":" +
                               "[" +
                               "{\"state\": " + pin1State.ToString().ToLower() + "," +
                               "\"number\":" + _pin1.PinNumber.ToString() + ", " +
                               "\"name\":\"Living Room\"}" +
                               "], \"Pwms\":[]}";

            esp8266Client.Write(value);
        }
Esempio n. 3
0
        private static void DisplayEspState(GHIElectronics.TinyCLR.BrainPad.Display display, Esp8266WIFI esp8266Client)
        {
            display.Clear();
            switch (esp8266Client.WifiState)
            {
            case WifiState.Disconnected:
                display.DrawSmallText(0, 0, "NO WIFI");
                break;

            case WifiState.Connected:
            case WifiState.GotIP:
                display.DrawSmallText(0, 0, "WIFI CONNECTED");
                break;

            case WifiState.NoAP:
                display.DrawSmallText(0, 0, "NO AP");
                break;

            case WifiState.Busy:
            case WifiState.Unknown:
            default:
                display.DrawSmallText(0, 0, "ERROR");
                break;
            }
            display.DrawSmallText(0, 10, $"IP: {esp8266Client.IPAddress}");
            string ready = esp8266Client.ConnectionState == ConnectionState.Ready ? "REMOTE CONNECTED" : "REMOTE CLOSED";

            display.DrawSmallText(0, 20, ready);
            display.RefreshScreen();
        }
Esempio n. 4
0
        private static void InitializeEsp8266Wifi(GHIElectronics.TinyCLR.BrainPad.Display display, GpioPin CH_PD)
        {
            _esp8266Client = new Esp8266WIFI(CH_PD, BrainPad.Expansion.UartPort.Usart1);
            _esp8266Client.OnWifiStateChanged += () =>
            {
                DisplayEspState(display, _esp8266Client);
            };
            _esp8266Client.OnIPAddressChanged += () =>
            {
                DisplayEspState(display, _esp8266Client);
                CheckAndOpenConnection(_esp8266Client);
            };
            _esp8266Client.OnDataConnectionChanged += () =>
            {
                DisplayEspState(display, _esp8266Client);
                if (_esp8266Client.ConnectionState == ConnectionState.Ready)
                {
                    SendDeviceInfo(_esp8266Client);
                }
                else if (_esp8266Client.ConnectionState == ConnectionState.Closed)
                {
                    CH_PD.Write(GpioPinValue.Low);
                    Thread.Sleep(200);
                    CH_PD.Write(GpioPinValue.High);
                    Thread.Sleep(20);

                    _esp8266Client.SetupWifiConnection(_connection.SSID, _connection.Password, WifiMode.Client);
                }
            };
            _esp8266Client.OnDataReceived += () =>
            {
                string data = _esp8266Client.Data;
                if (data.IndexOf("CMD=") >= 0)
                {
                    int idx = data.IndexOf("CMD=");
                    data = data.Substring(idx + 4);
                    if (data.ToUpper() == "GETDEVICEINFO")
                    {
                        SendDeviceInfo(_esp8266Client);
                    }
                }
                else if (data.IndexOf("SETDIGITAL=") >= 0)
                {
                    int idx = data.IndexOf("SETDIGITAL=");
                    data = data.Substring(idx + 11);
                    string[] splits = data.Split('|');
                    foreach (var split in splits)
                    {
                        if (string.IsNullOrEmpty(split))
                        {
                            continue;
                        }
                        var parts = split.Split(':');
                        SetDigitalPin(int.Parse(parts[0]), parts[1]);
                    }
                }
                else if (data.IndexOf("ERROR") >= 0 && data.IndexOf("CLOSED") >= 0)
                {
                    CheckAndOpenConnection(_esp8266Client);
                }
            };

            _esp8266Client.SetupWifiConnection(_connection.SSID, _connection.Password, WifiMode.Client);
        }