From 63224bf098ced3e66dac108bafb9b2389d8d58f5 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 19 Apr 2018 21:16:48 +1200 Subject: [PATCH] Added mDNS browser example Bumped version --- Version.xml | 2 +- examples/Other/mDNSExample/mDNSExample.ino | 165 ++++++++++++++++++++ examples/Other/mDNSExample/mDNSExample.mlpz | Bin 0 -> 20263 bytes library.properties | 2 +- 4 files changed, 167 insertions(+), 2 deletions(-) create mode 100644 examples/Other/mDNSExample/mDNSExample.ino create mode 100644 examples/Other/mDNSExample/mDNSExample.mlpz diff --git a/Version.xml b/Version.xml index c755e52..ab62335 100644 --- a/Version.xml +++ b/Version.xml @@ -1,4 +1,4 @@ - 1.14 + 1.15 diff --git a/examples/Other/mDNSExample/mDNSExample.ino b/examples/Other/mDNSExample/mDNSExample.ino new file mode 100644 index 0000000..e18f02c --- /dev/null +++ b/examples/Other/mDNSExample/mDNSExample.ino @@ -0,0 +1,165 @@ +/* + mDNSExample - + Based on example Transparent UART to Telnet Server for esp8266 + + See: https://www.megunolink.com/documentation/connecting/mdns-browser/ + for more information + + Copyright (c) 2018 Number Eight Innovation Limited. + Copyright (c) 2015 Hristo Gochkov. All rights reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ +#include +#include + +// Fill in your network information +const char* ssid = "ENTER SSID"; +const char* password = "ENTER PASSWORD"; + +// Maximum number of clients that can connect to this device +#define MAX_SRV_CLIENTS 1 +WiFiServer server(23); +WiFiClient serverClients[MAX_SRV_CLIENTS]; + +String MakeMine(const char *Template) +{ + uint16_t uChipId = ESP.getChipId(); + String Result = String(Template) + String(uChipId, HEX); + return Result; +} + +void ConnectToWiFi() +{ + WiFi.mode(WIFI_STA); + WiFi.begin(ssid, password); + + Serial.print("Connecting to "); Serial.println(ssid); + + uint8_t i = 0; + while (WiFi.status() != WL_CONNECTED) + { + Serial.print('.'); + delay(500); + + if ((++i % 16) == 0) + { + Serial.println(F(" still trying to connect")); + } + } + + Serial.print(F("Connected. My IP address is: ")); + Serial.println(WiFi.localIP()); +} + +void AdvertiseServices() +{ + String MyName = MakeMine("WiFiSensor"); + if (MDNS.begin(MyName.c_str())) + { + Serial.println(F("mDNS responder started")); + Serial.print(F("My name is: ")); + Serial.println(MyName.c_str()); + + // Add service to MDNS-SD + MDNS.addService("n8i-mlp", "tcp", 23); + } + else + { + while (1) + { + Serial.println(F("Error setting up MDNS responder")); + delay(1000); + } + } +} + +void setup() +{ + Serial.begin(115200); + Serial.println(F("mDNS Test")); + Serial.println(F("---------")); + + ConnectToWiFi(); + + AdvertiseServices(); + + // Start the TCP server + server.begin(); + server.setNoDelay(true); + + Serial.println("Ready."); +} + +void loop() +{ + uint8_t i; + // check if there are any new clients wanting to connect + if (server.hasClient()) + { + for(i = 0; i < MAX_SRV_CLIENTS; i++) + { + //find free/disconnected spot + if (!serverClients[i] || !serverClients[i].connected()) + { + if(serverClients[i]) serverClients[i].stop(); + serverClients[i] = server.available(); + Serial.print("New client: "); Serial.print(i); + break; + } + } + //no free/disconnected spot so reject + if ( i == MAX_SRV_CLIENTS) + { + WiFiClient serverClient = server.available(); + serverClient.stop(); + Serial.println("Connection rejected "); + } + } + + // check clients for data. Any data that is received is sent + // out the local serial port. + for(i = 0; i < MAX_SRV_CLIENTS; i++) + { + if (serverClients[i] && serverClients[i].connected()) + { + if (serverClients[i].available()) + { + //get data from the telnet client and push it to the UART + while (serverClients[i].available()) + { + Serial.write(serverClients[i].read()); + } + } + } + } + + // Check UART for data. Any serial data received is sent to + // connected TCP clients. + if(Serial.available()) + { + size_t len = Serial.available(); + uint8_t sbuf[len]; + Serial.readBytes(sbuf, len); + //push UART data to all connected telnet clients + for(i = 0; i < MAX_SRV_CLIENTS; i++) + { + if (serverClients[i] && serverClients[i].connected()){ + serverClients[i].write(sbuf, len); + delay(1); + } + } + } +} diff --git a/examples/Other/mDNSExample/mDNSExample.mlpz b/examples/Other/mDNSExample/mDNSExample.mlpz new file mode 100644 index 0000000000000000000000000000000000000000..0a6cefd62c90c5043cdc0839ea243bbd39b10374 GIT binary patch literal 20263 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 literal 0 HcmV?d00001 diff --git a/library.properties b/library.properties index 46ea518..1ea664f 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=MegunoLink -version=1.14 +version=1.15 author=Number Eight Innovation maintainer=Number Eight Innovation sentence=Library for storing data in the eeprom, processing serial messages and plotting data with MegunoLink.