sync with devt branch
20
.travis.yml
@ -11,27 +11,15 @@ before_install:
|
|||||||
before_script:
|
before_script:
|
||||||
- "export DISPLAY=:99.0"
|
- "export DISPLAY=:99.0"
|
||||||
- sleep 3 # give xvfb some time to start
|
- sleep 3 # give xvfb some time to start
|
||||||
- wget http://downloads.arduino.cc/arduino-1.6.5-linux64.tar.xz
|
- wget http://downloads.arduino.cc/arduino-1.6.8-linux64.tar.xz
|
||||||
- tar xf arduino-1.6.5-linux64.tar.xz
|
- tar xf arduino-1.6.8-linux64.tar.xz
|
||||||
- mv arduino-1.6.5 $HOME/arduino_ide
|
- mv arduino-1.6.8 $HOME/arduino_ide
|
||||||
- cd $HOME/arduino_ide/hardware
|
- cd $HOME/arduino_ide/hardware
|
||||||
- mkdir esp8266com
|
- mkdir esp8266com
|
||||||
- cd esp8266com
|
- cd esp8266com
|
||||||
- wget https://github.com/esp8266/Arduino/releases/download/2.1.0/esp8266-2.1.0.zip
|
- git clone https://github.com/esp8266/Arduino.git esp8266
|
||||||
- unzip esp8266-2.1.0.zip
|
|
||||||
- mv esp8266-2.1.0 esp8266
|
|
||||||
- wget http://arduino.esp8266.com/versions/2.1.0/package_esp8266com_index.json
|
|
||||||
- mkdir esp8266/package
|
|
||||||
- mv package_esp8266com_index.json esp8266/package/package_esp8266com_index.template.json
|
|
||||||
- cd esp8266/tools
|
- cd esp8266/tools
|
||||||
- python get.py
|
- python get.py
|
||||||
- cd ..
|
|
||||||
- head -11 ./platform.txt > pt.txt
|
|
||||||
- echo 'runtime.tools.xtensa-lx106-elf-gcc.path={runtime.platform.path}/tools/xtensa-lx106-elf' >> pt.txt
|
|
||||||
- echo 'runtime.tools.esptool.path={runtime.platform.path}/tools/esptool' >> pt.txt
|
|
||||||
- tail -110 ./platform.txt >> pt.txt
|
|
||||||
- rm -fr platform.txt
|
|
||||||
- mv pt.txt platform.txt
|
|
||||||
|
|
||||||
|
|
||||||
script:
|
script:
|
||||||
|
218
README.md
@ -1,63 +1,45 @@
|
|||||||
# ESP8266
|
# ESP8266
|
||||||
|
Firmware for ESP8266 used with 3D printer using [arduino core version](https://github.com/esp8266/Arduino)
|
||||||
|
This firmware allows not only to have a cheap bridge between Wifi and serial, but also to have a web UI to configure wifi, to monitor 3D printer and even control it, and to make things easy,
|
||||||
|
UI is fully customizable without reflashing FW.
|
||||||
|
Firmware should work with any 3D printer firmware (repetier/marlin/etc..) if serial connection has correct setup.
|
||||||
|
I currently use it with my personnal flavor of [repetier for Due based boards](https://github.com/luc-github/Repetier-Firmware-0.92).
|
||||||
|
Please use ESP with at least 1M flash, for ESP with 512K there is limited version [here](https://github.com/luc-github/ESP8266/tree/ESP-512K-64KSPIFFS)
|
||||||
|
|
||||||
[](https://gitter.im/luc-github/ESP8266?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
<u>Stable version:</u>
|
||||||
FW for ESP8266 used with 3D printer
|
Arduino ide 1.6.5 with stable [2.0.0](http://arduino.esp8266.com/versions/2.1.0/package_esp8266com_index.json) from ESP8266, please use https://github.com/luc-github/ESP8266/releases/tag/v0.5.1
|
||||||
Development version:
|
|
||||||
Arduino ide 1.6.5 with stable 2.1.0 from ESP8266 : [](https://travis-ci.org/luc-github/ESP8266)
|
|
||||||
Stable version:
|
|
||||||
Arduino ide 1.6.5 with stable 2.0.0 from ESP8266, please use https://github.com/luc-github/ESP8266/releases/tag/v0.5.1
|
|
||||||
|
|
||||||
Both version seems having instability if compiled/flashed under linux (https://github.com/luc-github/ESP8266/issues/64) - so consider to use windows to compile/flash until core is fixed.
|
<u>Development version:</u>
|
||||||
|
Arduino ide 1.6.8 with git from ESP8266 : [](https://travis-ci.org/luc-github/ESP8266)
|
||||||
|
|
||||||
##Description
|
[All releases](https://github.com/luc-github/ESP8266/wiki)
|
||||||
Thanks to @disneysw for bringing this module idea
|
|
||||||
Thanks to @lkarlslund for suggestion about independant reset using GPIO2
|
|
||||||
Thanks to all contributors (treepleks, j0hnlittle , and feedbacks owners)
|
|
||||||
|
|
||||||
Have a bridge configurable by web (implemented) and optionally by printer (not yet implemented)
|
:question:Any question ?[](https://gitter.im/luc-github/ESP8266?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||||
Have a front end to know what is the wifi status (implemented) or know what is the print status (not yet implemented) - this part can be optional and removed by compilation directive if no need
|
:exclamation:Any issue ? [submit ticket](https://github.com/luc-github/ESP8266/issues)
|
||||||
|
|
||||||
Should be compatible with reprap printer (Marlin FW/Repetier FW) as soon as you can make both serial to communicate.
|
:warning: All versions seem having instability if compiled/flashed under linux (https://github.com/luc-github/ESP8266/issues/64), so consider to use windows to compile/flash until core is fixed.
|
||||||
|
|
||||||
Current release listed here: https://github.com/luc-github/ESP8266/wiki
|
:+1:Thanks
|
||||||
|
* to @disneysw for bringing this module idea
|
||||||
|
* to @lkarlslund for suggestion about independant reset using GPIO2
|
||||||
|
* to all contributors (treepleks, j0hnlittle, all feedbacks owners and donations)
|
||||||
|
|
||||||
Master is using 2.1.0 of https://github.com/esp8266/arduino
|
Every support is welcome: [<img src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG_global.gif" border="0" alt="PayPal – The safer, easier way to pay online.">](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=Y8FFE7NA4LJWQ)
|
||||||
use http://arduino.esp8266.com/versions/2.1.0/package_esp8266com_index.json in arduino 1.6.5 IDE preferences
|
Especially if need to buy new modules for testing.
|
||||||
|
|
||||||
If you use an ESP with 512K flash like ESP01 please go here : https://github.com/luc-github/ESP8266/tree/ESP-512K-64KSPIFFS, it is dedicated to low memory device.
|
##Features
|
||||||
If you use an ESP with more than 512K flash please use master.
|
* Serial/Wifi bridge using configurable port 8888, here to enable/disable [TCP_IP_DATA_FEATURE](https://github.com/luc-github/ESP8266/blob/master/esp8266/config.h)
|
||||||
|
* Use GPIO2 to ground to reset all settings in hard way - 2-6 sec after boot / not before!! Set GPIO2 to ground before boot change boot mode and go to special boot that do not reach FW. Currently boot take 10 sec - giving 8 seconds to connect GPIO2 to GND and do an hard recovery for settings, here to enable/disable [RECOVERY_FEATURE](https://github.com/luc-github/ESP8266/blob/master/esp8266/config.h)
|
||||||
##Hardware connection
|
* Wifi configuration by web browser (Station or Access point)
|
||||||
--Use GPIO2 to ground to reset all settings in hard way - 2-6 sec after boot / not before!! Set GPIO2 to ground before boot change boot mode and go to special boot that do not reach FW. Currently boot take 10 sec - giving 8 seconds to connect GPIO2 to GND and do an hard recovery for settings
|
* Authentication for sensitive pages, here to enable/disable [AUTHENTICATION_FEATURE](https://github.com/luc-github/ESP8266/blob/master/esp8266/config.h)
|
||||||
--Use GPIO0 to ground to be in update mode
|
* Update firmware by web browser, here to enable/disable [WEB_UPDATE_FEATURE](https://github.com/luc-github/ESP8266/blob/master/esp8266/config.h)
|
||||||
--Use a switch to reset/disable module
|
* Control ESP module using commands on serial or data port, here to enable/disable [SERIAL_COMMAND_FEATURE](https://github.com/luc-github/ESP8266/blob/master/esp8266/config.h)
|
||||||
For ESP01:
|
* UI fully constomizable without reflashing FW using html templates, [keywords](https://raw.githubusercontent.com/luc-github/ESP8266/master/docs/keywords.txt) and html files/images
|
||||||
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/Wires.png><br>
|
* Captive portal in Access point mode which redirect all unknow call to main page, here to enable/disable [CAPTIVE_PORTAL_FEATURE](https://github.com/luc-github/ESP8266/blob/master/esp8266/config.h)
|
||||||
|
* mDNS which allows to key the name defined in web browser and connect only with bonjour installed on computer, here to enable/disable [MDNS_FEATURE](https://github.com/luc-github/ESP8266/blob/master/esp8266/config.h)
|
||||||
For ESP12E:
|
* SSDP, this feature is a discovery protocol, supported on Windows out of the box, here to enable/disable [SSDP_FEATURE](https://github.com/luc-github/ESP8266/blob/master/esp8266/config.h)
|
||||||
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/WiresESP12E.png><br>
|
* Printer monitoring / control (temperatures/speed/jog/list SDCard content/launch,pause or stop a print/etc...), here to enable/disable [MONITORING_FEATURE/INFO_MSG_FEATURE/ERROR_MSG_FEATURE/STATUS_MSG_FEATURE](https://github.com/luc-github/ESP8266/blob/master/esp8266/config.h)
|
||||||
<br>
|
* Fail safe mode (Access point)is enabled if cannot connect to defined station at boot.
|
||||||
For Davinci Board:<BR>
|
|
||||||
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/davinci.png><br>
|
|
||||||
|
|
||||||
##Development
|
|
||||||
Currently using [Arduino IDE 1.6.5](http://arduino.cc/en/Main/Software) with the esp8266 module from board manager added from [github.com/esp8266/Arduino](https://github.com/esp8266/Arduino)
|
|
||||||
please use 2.1.0 relased version (http://arduino.esp8266.com/versions/2.1.0/package_esp8266com_index.json)
|
|
||||||
staging version (http://arduino.esp8266.com/staging/package_esp8266com_index.json) is not yet stable neither compatible with current master please check dev branch https://github.com/luc-github/ESP8266/tree/devt
|
|
||||||
|
|
||||||
Additionnaly:
|
|
||||||
--Use minimal css from http://getbootstrap.com/examples/theme/
|
|
||||||
|
|
||||||
##Flash the Module
|
|
||||||
*Tools:
|
|
||||||
--Use IDE to upload directly (latest version of board manager module generate one binary)
|
|
||||||
-- to flash the htm files present in data directory you need to use another tool, installation and usage is explained here: https://github.com/esp8266/Arduino/blob/master/doc/filesystem.md
|
|
||||||
Once flashed you also can use the web updater to flash new FW in System Configuration Page
|
|
||||||
|
|
||||||
*Connection
|
|
||||||
--Connect GPIO0 to ground to be in update mode
|
|
||||||
|
|
||||||
<H3>Do not flash Printer fw with ESP connected - it bring troubles, at least on DaVinci </H3>
|
|
||||||
|
|
||||||
##Web configuration
|
##Web configuration
|
||||||
*Wifi Mode : Access point / Client station
|
*Wifi Mode : Access point / Client station
|
||||||
@ -89,62 +71,34 @@ Password: admin
|
|||||||
|
|
||||||
These are the pages defined using template:
|
These are the pages defined using template:
|
||||||
Home page :
|
Home page :
|
||||||
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/Page1.png><br>
|
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/images/UI/Page1.png><br>
|
||||||
System Configuration Page:
|
System Configuration Page:
|
||||||
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/Page2.png><br>
|
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/images/UI/Page2.png><br>
|
||||||
Access Point Configuration Page:
|
Access Point Configuration Page:
|
||||||
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/Page3.png><br>
|
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/images/UI/Page3.png><br>
|
||||||
Client Configuration Page:
|
Client Configuration Page:
|
||||||
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/Page4.png><br>
|
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/images/UI/Page4.png><br>
|
||||||
Printer Status Page for 64K SPIFFS, due to limited space available no fancy:
|
Printer Status Page for 64K SPIFFS, due to limited space available no fancy:
|
||||||
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/Page5-2.png><br>
|
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/images/UI/Page5-2.png><br>
|
||||||
Printer Status Page for more than 64K SPIFFS, fancy one:
|
Printer Status Page for more than 64K SPIFFS, fancy one:
|
||||||
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/page5.png><br>
|
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/images/UI/page5.png><br>
|
||||||
Extra Settings Page, for web UI and for printer:
|
Extra Settings Page, for web UI and for printer:
|
||||||
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/Page6.png><br>
|
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/images/UI/Page6.png><br>
|
||||||
Change password Page:
|
Change password Page:
|
||||||
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/Page7.png><br>
|
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/images/UI/Page7.png><br>
|
||||||
Login Page:
|
Login Page:
|
||||||
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/Page8.png><br>
|
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/images/UI/Page8.png><br>
|
||||||
the template files are stored on SPIFFS:
|
the template files are stored on SPIFFS:
|
||||||
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/files.png><br>
|
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/images/UI/files.png><br>
|
||||||
and uploaded using [IDE](http://arduino.esp8266.com/versions/1.6.5-1160-gef26c5f/doc/reference.html#file-system)
|
and uploaded using [pluggin IDE](http://esp8266.github.io/Arduino/versions/2.1.0/doc/filesystem.html#uploading-files-to-file-system)
|
||||||
The list of keywords can be find here : https://github.com/luc-github/ESP8266/blob/master/keywords.txt
|
Any files on SPIFFS can be called on web interface without having the path hard coded, this give more flexibility, favicon.ico is a good example of it.
|
||||||
Any files on SPIFFS can be called on web interface without having the path hard coded - this give more flexibility, favicon.ico is a good example of it.
|
So UI is kind of separated from FW which allow easier modifications. For this a light file manager is available in extra settings page, it allows to upload/download/delete files.
|
||||||
So UI is kind of separated from FW which allow easier modifications. For this a light file manager is available in extra settings page, it allows to upload/download/delete files. as SPIFFS is flat filesystem no directory management is necessary so it is very simple.
|
Because SPIFFS is flat filesystem, no directory management is necessary, so it is very simple.
|
||||||
|
|
||||||
Additionally 404.tpl (the page not found) and restart.tpl(restart page when applying changes) are not mandatory, a fail safe version is embeded if they are not present.
|
Additionally 404.tpl (the page not found) and restart.tpl(restart page when applying changes) are not mandatory, a fail safe version is embeded if they are not present.
|
||||||
|
|
||||||
Currently, I tested on ESP01 using 64K SPIFFS ( please use data directory content accordingly due to space limitation) and NodeMCU 1.0 1M SPIFFS.
|
##Direct commands:
|
||||||
##Modifying and Testing tpl files
|
|
||||||
To help to visualize tpl modifications a local tool has been created by [j0hnlittle](https://github.com/j0hnlittle) to avoid to upload everytime your tpl files just to see the results of your modifications
|
|
||||||
It is a python script (2.7+) located in tools directory, launch it: python server.py, then open browser: http://localhost:8080
|
|
||||||
It will display the web ui and allow some navigation
|
|
||||||
|
|
||||||
##Protocol for discovery
|
|
||||||
*mDNS : on Station mode only with bonjour installed on computer (done)
|
|
||||||
*SSDP : on Station and AP mode (done)
|
|
||||||
*Captive portal : on AP mode only (done)
|
|
||||||
|
|
||||||
##Basic Authentification
|
|
||||||
Can be disabled in FW
|
|
||||||
default user: admin
|
|
||||||
default password: admin
|
|
||||||
|
|
||||||
#OTA support
|
|
||||||
Currently only web update is supported not telnet one
|
|
||||||
|
|
||||||
##Commands/msg from/to serial(not fully implemented):
|
|
||||||
*from module to printer by serial communication
|
|
||||||
-M117 [Message], Error/status message from module (done)
|
|
||||||
-Send Wifi settings [AP/STATION,SSID,DHC/STATIC,IP,MASK,GW,STATUS,MAC ADDRESSS, BAUD?], ]Module configuration without password
|
|
||||||
|
|
||||||
*from host to printer on port 8888 (implemented)
|
|
||||||
- bridge from TCP/IP to Serial and vice-versa (done)
|
|
||||||
|
|
||||||
*from printer/host to module (not fully implemented)
|
|
||||||
-request configuration/status
|
|
||||||
-set AP/STATION,SSID,PASSSWORD,DHC/STATIC,IP,MASK,GW,BAUD from serial
|
|
||||||
-restart module from host/printer: [ESP888]RESTART
|
-restart module from host/printer: [ESP888]RESTART
|
||||||
-Get IP (only printer see answer): [ESP111]M117
|
-Get IP (only printer see answer): [ESP111]M117
|
||||||
-reset EEPROM and restart: [ESP444]RESET
|
-reset EEPROM and restart: [ESP444]RESET
|
||||||
@ -157,44 +111,50 @@ Currently only web update is supported not telnet one
|
|||||||
-IP Static: [ESP104]STATIC
|
-IP Static: [ESP104]STATIC
|
||||||
-IP DHCP: [ESP104]DHCP
|
-IP DHCP: [ESP104]DHCP
|
||||||
|
|
||||||
|
##Installation
|
||||||
|
* For stable:
|
||||||
|
Please use [Arduino IDE 1.6.5](http://arduino.cc/en/Main/Software) with the esp8266 module from board manager use 2.0.0 stable version (not 2.1.0 it has bugs) by adding in your preferences http://arduino.esp8266.com/stable/package_esp8266com_index.json
|
||||||
|
|
||||||
|
* For development:
|
||||||
|
Please use [Arduino IDE 1.6.8](http://arduino.cc/en/Main/Software) and [git version of esp8266 module](http://esp8266.github.io/Arduino/versions/2.1.0/doc/installing.html#using-git-version)
|
||||||
|
|
||||||
|
* To flash the module :
|
||||||
|
Use IDE to upload directly (latest version of board manager module generate one binary)
|
||||||
|
* To flash the html files present in data directory you need to use another tool, installation and usage is explained [here](https://github.com/esp8266/Arduino/blob/master/doc/filesystem.md#uploading-files-to-file-system)
|
||||||
|
Once flashed you also can use the web updater to flash new FW in System Configuration Page or go to settings to change html files
|
||||||
|
|
||||||
|
<H3>:warning:Do not flash Printer fw with ESP connected - it bring troubles, at least on DaVinci</H3>
|
||||||
|
|
||||||
|
##Contribution/customization
|
||||||
|
To modifying and Testing tpl files a local tool has been created by [j0hnlittle](https://github.com/j0hnlittle) to avoid to upload everytime your tpl files just to see the results of your modifications. It is a python script (2.7+) located in tools directory, launch it: python server.py, then open browser: http://localhost:8080
|
||||||
|
It will display the web ui and allow some navigation
|
||||||
|
|
||||||
|
To style the code before pushing PR please use [astyle --style=otbs *.h *.cpp *.ino](http://astyle.sourceforge.net/)
|
||||||
|
|
||||||
|
Feedback/suggestion/discussions are always welcome
|
||||||
|
|
||||||
|
|
||||||
|
##Result of ESP12E on Davinci
|
||||||
|
I use a proto board to connect ESP12E socket, one micro switch for recovery, one jumper for normal usage/ flash, I did not put hardware switch.
|
||||||
|
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/images/Davinci/board.jpg><br>
|
||||||
|
Connected to Davinci:
|
||||||
|
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/images/Davinci/boardconnected.jpg><br>
|
||||||
|
The back cover:
|
||||||
|
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/images/Davinci/backside.jpg><br>
|
||||||
|
The screen when connected to AP:
|
||||||
|
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/images/Davinci/screen.jpg><br>
|
||||||
|
The settings:
|
||||||
|
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/images/Davinci/Capture.PNG><br>
|
||||||
|
|
||||||
|
##Result of ESP12E on Due/RADDS
|
||||||
|
the rendering on screen when connection to AP is done:
|
||||||
|
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/images/RADDS/screen.jpg><br>
|
||||||
|
The settings:
|
||||||
|
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/images/RADDS/Capture.PNG><br>
|
||||||
|
|
||||||
##Front End (implemented)
|
|
||||||
--Display printer status (done)
|
|
||||||
--Display temperatures (done)
|
|
||||||
--Display positions/flow/speed (done)
|
|
||||||
--Display print progress if any (done)
|
|
||||||
--List SDCard Content (done)
|
|
||||||
--Launch a Print (done)
|
|
||||||
--Stop/Pause a Print (done)
|
|
||||||
--Emergency Stop (done)
|
|
||||||
--Jog control / custom commands (done)
|
|
||||||
|
|
||||||
##TODO
|
##TODO
|
||||||
-- Close open topics
|
-- Close open topics
|
||||||
-- Do testing (a lot)
|
-- Do testing (a lot)
|
||||||
-- UI Improvement
|
-- UI Improvement
|
||||||
--<s>Printer EEPROM management</s> (Canceled/Postponed for next stage)
|
-- Printer EEPROM management
|
||||||
|
|
||||||
##Result of ESP12E on Davinci
|
|
||||||
I use a proto board to connect ESP12E socket, one micro switch for recovery, one jumper for normal usage/ flash, I did not put hardware switch.
|
|
||||||
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/Davinci/board.jpg><br>
|
|
||||||
Connected to Davinci:
|
|
||||||
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/Davinci/boardconnected.jpg><br>
|
|
||||||
The back cover:
|
|
||||||
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/Davinci/backside.jpg><br>
|
|
||||||
The screen when connected to AP:
|
|
||||||
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/Davinci/screen.jpg><br>
|
|
||||||
The settings:
|
|
||||||
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/Davinci/Capture.PNG><br>
|
|
||||||
|
|
||||||
##Result of ESP12E on Due/RADDS
|
|
||||||
Use Serial1 for communications
|
|
||||||
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/RADDS/RADDS.png><br>
|
|
||||||
the rendering on screen when connection to AP is done:
|
|
||||||
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/RADDS/screen.jpg><br>
|
|
||||||
The settings:
|
|
||||||
<img src=https://raw.githubusercontent.com/luc-github/ESP8266/master/RADDS/Capture.PNG><br>
|
|
||||||
|
|
||||||
##Donation:
|
|
||||||
Every support is welcome: [<img src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG_global.gif" border="0" alt="PayPal – The safer, easier way to pay online.">](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=Y8FFE7NA4LJWQ)
|
|
||||||
Especially if need to buy new modules for testing.
|
|
||||||
|
5
TODO.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
TODO
|
||||||
|
MONITORING_FEATURE : temperatures
|
||||||
|
INFO_MSG_FEATURE
|
||||||
|
ERROR_MSG_FEATURE
|
||||||
|
STATUS_MSG_FEATURE
|
@ -236,6 +236,7 @@ void CONFIG::print_config()
|
|||||||
{
|
{
|
||||||
//use biggest size for buffer
|
//use biggest size for buffer
|
||||||
char sbuf[MAX_PASSWORD_LENGTH+1];
|
char sbuf[MAX_PASSWORD_LENGTH+1];
|
||||||
|
uint8_t ipbuf[4];
|
||||||
byte bbuf=0;
|
byte bbuf=0;
|
||||||
int ibuf=0;
|
int ibuf=0;
|
||||||
if (CONFIG::read_byte(EP_WIFI_MODE, &bbuf )) {
|
if (CONFIG::read_byte(EP_WIFI_MODE, &bbuf )) {
|
||||||
@ -257,7 +258,6 @@ void CONFIG::print_config()
|
|||||||
} else {
|
} else {
|
||||||
Serial.println(F("Error reading SSID"));
|
Serial.println(F("Error reading SSID"));
|
||||||
}
|
}
|
||||||
//if (CONFIG::read_string(EP_PASSWORD, sbuf , MAX_PASSWORD_LENGTH))Serial.println(sbuf);
|
|
||||||
|
|
||||||
if (CONFIG::read_byte(EP_IP_MODE, &bbuf )) {
|
if (CONFIG::read_byte(EP_IP_MODE, &bbuf )) {
|
||||||
Serial.print(F("IP Mode: "));
|
Serial.print(F("IP Mode: "));
|
||||||
@ -272,23 +272,23 @@ void CONFIG::print_config()
|
|||||||
Serial.println(F("Error reading IP mode"));
|
Serial.println(F("Error reading IP mode"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CONFIG::read_buffer(EP_IP_VALUE,(byte *)sbuf , IP_LENGTH)) {
|
if (CONFIG::read_buffer(EP_IP_VALUE,(byte *)ipbuf , IP_LENGTH)) {
|
||||||
Serial.print(F("IP: "));
|
Serial.print(F("IP: "));
|
||||||
Serial.println(wifi_config.ip2str((byte *)sbuf));
|
Serial.println(IPAddress(ipbuf).toString());
|
||||||
} else {
|
} else {
|
||||||
Serial.println(F("Error reading IP"));
|
Serial.println(F("Error reading IP"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CONFIG::read_buffer(EP_MASK_VALUE, (byte *)sbuf , IP_LENGTH)) {
|
if (CONFIG::read_buffer(EP_MASK_VALUE, (byte *)ipbuf , IP_LENGTH)) {
|
||||||
Serial.print(F("Subnet: "));
|
Serial.print(F("Subnet: "));
|
||||||
Serial.println(wifi_config.ip2str((byte *)sbuf));
|
Serial.println(IPAddress(ipbuf).toString());
|
||||||
} else {
|
} else {
|
||||||
Serial.println(F("Error reading subnet"));
|
Serial.println(F("Error reading subnet"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CONFIG::read_buffer(EP_GATEWAY_VALUE, (byte *)sbuf , IP_LENGTH)) {
|
if (CONFIG::read_buffer(EP_GATEWAY_VALUE, (byte *)ipbuf , IP_LENGTH)) {
|
||||||
Serial.print(F("Gateway: "));
|
Serial.print(F("Gateway: "));
|
||||||
Serial.println(wifi_config.ip2str((byte *)sbuf));
|
Serial.println(IPAddress(ipbuf).toString());
|
||||||
} else {
|
} else {
|
||||||
Serial.println(F("Error reading gateway"));
|
Serial.println(F("Error reading gateway"));
|
||||||
}
|
}
|
||||||
@ -443,5 +443,17 @@ void CONFIG::print_config()
|
|||||||
Serial.println(F("Enabled"));
|
Serial.println(F("Enabled"));
|
||||||
#else
|
#else
|
||||||
Serial.println(F("Disabled"));
|
Serial.println(F("Disabled"));
|
||||||
|
#endif
|
||||||
|
Serial.print(F("Pin 2 Recovery: "));
|
||||||
|
#ifdef RECOVERY_FEATURE
|
||||||
|
Serial.println(F("Enabled"));
|
||||||
|
#else
|
||||||
|
Serial.println(F("Disabled"));
|
||||||
|
#endif
|
||||||
|
Serial.print(F("Authentication: "));
|
||||||
|
#ifdef AUTHENTICATION_FEATURE
|
||||||
|
Serial.println(F("Enabled"));
|
||||||
|
#else
|
||||||
|
Serial.println(F("Disabled"));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
//comment to disable
|
//comment to disable
|
||||||
//MDNS_FEATURE: this feature allow type the name defined
|
//MDNS_FEATURE: this feature allow type the name defined
|
||||||
//in web browser by default: http:\\esp8266.local and connect
|
//in web browser by default: http:\\esp8266.local and connect
|
||||||
#define MDNS_FEATURE
|
//#define MDNS_FEATURE
|
||||||
|
|
||||||
//SSDD_FEATURE: this feature is a discovery protocol, supported on Windows out of the box
|
//SSDD_FEATURE: this feature is a discovery protocol, supported on Windows out of the box
|
||||||
#define SSDP_FEATURE
|
#define SSDP_FEATURE
|
||||||
@ -41,16 +41,16 @@
|
|||||||
//TCP_IP_DATA_FEATURE: allow to connect serial from TCP/IP
|
//TCP_IP_DATA_FEATURE: allow to connect serial from TCP/IP
|
||||||
#define TCP_IP_DATA_FEATURE
|
#define TCP_IP_DATA_FEATURE
|
||||||
|
|
||||||
|
//RECOVERY_FEATURE: allow to use GPIO2 pin as hardware reset for EEPROM, add 8s to boot time to let user to jump GPIO2 to GND
|
||||||
|
#define RECOVERY_FEATURE
|
||||||
|
|
||||||
#ifndef CONFIG_h
|
#ifndef CONFIG_h
|
||||||
#define CONFIG_h
|
#define CONFIG_h
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include "wifi.h"
|
#include "wifi.h"
|
||||||
extern "C" {
|
|
||||||
#include "user_interface.h"
|
|
||||||
}
|
|
||||||
//version and sources location
|
//version and sources location
|
||||||
#define FW_VERSION "0.6.0"
|
#define FW_VERSION "0.6.1"
|
||||||
#define REPOSITORY "https://github.com/luc-github/ESP8266"
|
#define REPOSITORY "https://github.com/luc-github/ESP8266"
|
||||||
|
|
||||||
|
|
||||||
@ -99,8 +99,8 @@ const byte DEFAULT_MASK_VALUE[] = {255, 255, 255, 0};
|
|||||||
#define DEFAULT_GATEWAY_VALUE DEFAULT_IP_VALUE
|
#define DEFAULT_GATEWAY_VALUE DEFAULT_IP_VALUE
|
||||||
const long DEFAULT_BAUD_RATE = 9600;
|
const long DEFAULT_BAUD_RATE = 9600;
|
||||||
const char M117_[] PROGMEM = "M117 ";
|
const char M117_[] PROGMEM = "M117 ";
|
||||||
#define DEFAULT_PHY_MODE PHY_MODE_11G
|
#define DEFAULT_PHY_MODE WIFI_PHY_MODE_11G
|
||||||
#define DEFAULT_SLEEP_MODE MODEM_SLEEP_T
|
#define DEFAULT_SLEEP_MODE WIFI_MODEM_SLEEP
|
||||||
#define DEFAULT_CHANNEL 11
|
#define DEFAULT_CHANNEL 11
|
||||||
#define DEFAULT_AUTH_TYPE AUTH_WPA_PSK
|
#define DEFAULT_AUTH_TYPE AUTH_WPA_PSK
|
||||||
#define DEFAULT_SSID_VISIBLE 1
|
#define DEFAULT_SSID_VISIBLE 1
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<BR><BR>
|
<BR><BR>
|
||||||
if not redirected, <a href='http://$WEB_ADDRESS$'>click here</a>
|
if not redirected, <a href='http://$WEB_ADDRESS$'>click here</a>
|
||||||
<BR><BR>
|
<BR><BR>
|
||||||
<PROGRESS name='prg' id='prg'>
|
<PROGRESS name='prg' id='prg'></PROGRESS>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
var i = 0;
|
var i = 0;
|
||||||
|
@ -10,7 +10,7 @@ $INCLUDE[css.inc]$
|
|||||||
<body>
|
<body>
|
||||||
<div class="container"><table class="nav">
|
<div class="container"><table class="nav">
|
||||||
<tr width=100%>
|
<tr width=100%>
|
||||||
<td class="$MENU_HOME$"><a href="http://$WEB_ADDRESS$">Home</a></td>
|
<td class="$MENU_HOME$"><a href="http://$WEB_ADDRESS$/HOME">Home</a></td>
|
||||||
<td class="$MENU_SYSTEM$"><a href="http://$WEB_ADDRESS$/CONFIGSYS">System</a></td>
|
<td class="$MENU_SYSTEM$"><a href="http://$WEB_ADDRESS$/CONFIGSYS">System</a></td>
|
||||||
<td class="$MENU_AP$"><a href="http://$WEB_ADDRESS$/CONFIGAP">Access Point</a></td>
|
<td class="$MENU_AP$"><a href="http://$WEB_ADDRESS$/CONFIGAP">Access Point</a></td>
|
||||||
<td class="$MENU_STA$"><a href="http://$WEB_ADDRESS$/CONFIGSTA">Station</a></td>
|
<td class="$MENU_STA$"><a href="http://$WEB_ADDRESS$/CONFIGSTA">Station</a></td>
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<BODY>
|
<BODY>
|
||||||
<CENTER>Restarting, please wait....
|
<CENTER>Restarting, please wait....
|
||||||
<BR>
|
<BR>
|
||||||
<PROGRESS name='prg' id='prg'>
|
<PROGRESS name='prg' id='prg'></PROGRESS>
|
||||||
</CENTER>
|
</CENTER>
|
||||||
<script>
|
<script>
|
||||||
var i = 0;
|
var i = 0;
|
||||||
|
@ -26,7 +26,7 @@ $SLEEP_MODE_OPTIONS_LIST$
|
|||||||
</select></div>
|
</select></div>
|
||||||
<div class="form-group $WEB_PORT_STATUS$"><label class="control-label" for="CONFIG3">Web port:</label><br>
|
<div class="form-group $WEB_PORT_STATUS$"><label class="control-label" for="CONFIG3">Web port:</label><br>
|
||||||
<input type="number" class="form-control" id="CONFIG3" name="WEBPORT" min="1" max="65000" step="1" placeholder="1~65000" value="$WEB_PORT$" style="width: auto;"></div>
|
<input type="number" class="form-control" id="CONFIG3" name="WEBPORT" min="1" max="65000" step="1" placeholder="1~65000" value="$WEB_PORT$" style="width: auto;"></div>
|
||||||
<div class="form-group $DATA_PORT_STATUS$" style="$DATA_PORT_VISIBILITY$"><label class="control-label" for="CONFIG4">Data port:</label><br>
|
<div id='dataport' class="form-group $DATA_PORT_STATUS$" style="$DATA_PORT_VISIBILITY$"><label class="control-label" for="CONFIG4">Data port:</label><br>
|
||||||
<input type="number" class="form-control" id="CONFIG4" name="DATAPORT" min="1" max="65000" step="1" placeholder="1~65000" value="$DATA_PORT$" style="width: auto;"></div>
|
<input type="number" class="form-control" id="CONFIG4" name="DATAPORT" min="1" max="65000" step="1" placeholder="1~65000" value="$DATA_PORT$" style="width: auto;"></div>
|
||||||
<div class="alert alert-danger" role="alert" style="$ERROR_MSG_VISIBILITY$" >
|
<div class="alert alert-danger" role="alert" style="$ERROR_MSG_VISIBILITY$" >
|
||||||
$ERROR_MSG$
|
$ERROR_MSG$
|
||||||
@ -69,6 +69,8 @@ document.getElementById('upload-button').style.visibility = 'hidden';
|
|||||||
document.getElementById('upload-button').style.width = '0px';
|
document.getElementById('upload-button').style.width = '0px';
|
||||||
document.getElementById('system').style.visibility = 'hidden';
|
document.getElementById('system').style.visibility = 'hidden';
|
||||||
document.getElementById('system').style.height = '0px';
|
document.getElementById('system').style.height = '0px';
|
||||||
|
document.getElementById('dataport').style.visibility = 'hidden';
|
||||||
|
document.getElementById('dataport').style.height = '0px';
|
||||||
document.getElementById('msg').style.visibility = "visible";
|
document.getElementById('msg').style.visibility = "visible";
|
||||||
document.getElementById('file-select').value="";
|
document.getElementById('file-select').value="";
|
||||||
document.getElementById('file-select').style.visibility = 'hidden';
|
document.getElementById('file-select').style.visibility = 'hidden';
|
||||||
|
4
esp8266/data/tags.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"WEB_ADDRESS":"localhost",
|
||||||
|
"PAGE_TITLE":"Testing things..."
|
||||||
|
}
|
@ -27,7 +27,6 @@
|
|||||||
#ifndef ARDUINO_ARCH_ESP8266
|
#ifndef ARDUINO_ARCH_ESP8266
|
||||||
#error Oops! Make sure you have 'ESP8266' compatible board selected from the 'Tools -> Boards' menu.
|
#error Oops! Make sure you have 'ESP8266' compatible board selected from the 'Tools -> Boards' menu.
|
||||||
#endif
|
#endif
|
||||||
#include <SPI.h>
|
|
||||||
#include <EEPROM.h>
|
#include <EEPROM.h>
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "wifi.h"
|
#include "wifi.h"
|
||||||
@ -47,9 +46,6 @@ DNSServer dnsServer;
|
|||||||
#ifdef SSDP_FEATURE
|
#ifdef SSDP_FEATURE
|
||||||
#include <ESP8266SSDP.h>
|
#include <ESP8266SSDP.h>
|
||||||
#endif
|
#endif
|
||||||
extern "C" {
|
|
||||||
#include "user_interface.h"
|
|
||||||
}
|
|
||||||
#include <FS.h>
|
#include <FS.h>
|
||||||
#define MAX_SRV_CLIENTS 1
|
#define MAX_SRV_CLIENTS 1
|
||||||
WiFiServer * data_server;
|
WiFiServer * data_server;
|
||||||
@ -61,14 +57,16 @@ void setup()
|
|||||||
web_interface = NULL;
|
web_interface = NULL;
|
||||||
data_server = NULL;
|
data_server = NULL;
|
||||||
WiFi.disconnect();
|
WiFi.disconnect();
|
||||||
system_update_cpu_freq(SYS_CPU_160MHZ);
|
WiFi.mode(WIFI_OFF);
|
||||||
delay(8000);
|
|
||||||
bool breset_config=false;
|
bool breset_config=false;
|
||||||
|
#ifdef RECOVERY_FEATURE
|
||||||
|
delay(8000);
|
||||||
//check if reset config is requested
|
//check if reset config is requested
|
||||||
pinMode(RESET_CONFIG_PIN, INPUT);
|
pinMode(RESET_CONFIG_PIN, INPUT);
|
||||||
if (digitalRead(RESET_CONFIG_PIN)==0) {
|
if (digitalRead(RESET_CONFIG_PIN)==0) {
|
||||||
breset_config=true; //if requested =>reset settings
|
breset_config=true; //if requested =>reset settings
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
//default baud rate
|
//default baud rate
|
||||||
long baud_rate=0;
|
long baud_rate=0;
|
||||||
|
|
||||||
@ -97,7 +95,7 @@ void setup()
|
|||||||
delay(1000);
|
delay(1000);
|
||||||
//put some default value to a void some exception at first start
|
//put some default value to a void some exception at first start
|
||||||
WiFi.mode(WIFI_AP);
|
WiFi.mode(WIFI_AP);
|
||||||
wifi_set_phy_mode(PHY_MODE_11G);
|
WiFi.setPhyMode(WIFI_PHY_MODE_11G);
|
||||||
Serial.flush();
|
Serial.flush();
|
||||||
delay(500);
|
delay(500);
|
||||||
Serial.swap();
|
Serial.swap();
|
||||||
@ -124,6 +122,13 @@ void setup()
|
|||||||
size_t headerkeyssize = sizeof(headerkeys)/sizeof(char*);
|
size_t headerkeyssize = sizeof(headerkeys)/sizeof(char*);
|
||||||
//ask server to track these headers
|
//ask server to track these headers
|
||||||
web_interface->WebServer.collectHeaders(headerkeys, headerkeyssize );
|
web_interface->WebServer.collectHeaders(headerkeys, headerkeyssize );
|
||||||
|
#ifdef CAPTIVE_PORTAL_FEATURE
|
||||||
|
if (WiFi.getMode()!=WIFI_STA ) {
|
||||||
|
// if DNSServer is started with "*" for domain name, it will reply with
|
||||||
|
// provided IP to all DNS request
|
||||||
|
dnsServer.start(DNS_PORT, "*", WiFi.softAPIP());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
web_interface->WebServer.begin();
|
web_interface->WebServer.begin();
|
||||||
#ifdef TCP_IP_DATA_FEATURE
|
#ifdef TCP_IP_DATA_FEATURE
|
||||||
//start TCP/IP interface
|
//start TCP/IP interface
|
||||||
@ -137,15 +142,6 @@ void setup()
|
|||||||
wifi_config.mdns.addService("http", "tcp", wifi_config.iweb_port);
|
wifi_config.mdns.addService("http", "tcp", wifi_config.iweb_port);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CAPTIVE_PORTAL_FEATURE
|
|
||||||
if (wifi_get_opmode()!=WIFI_STA ) {
|
|
||||||
// if DNSServer is started with "*" for domain name, it will reply with
|
|
||||||
// provided IP to all DNS request
|
|
||||||
dnsServer.setErrorReplyCode(DNSReplyCode::NoError);
|
|
||||||
dnsServer.start(DNS_PORT, "*", WiFi.softAPIP());
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef SSDP_FEATURE
|
#ifdef SSDP_FEATURE
|
||||||
String stmp;
|
String stmp;
|
||||||
SSDP.setSchemaURL("description.xml");
|
SSDP.setSchemaURL("description.xml");
|
||||||
@ -154,7 +150,7 @@ void setup()
|
|||||||
stmp=wifi_config.get_default_hostname();
|
stmp=wifi_config.get_default_hostname();
|
||||||
}
|
}
|
||||||
SSDP.setName(stmp.c_str());
|
SSDP.setName(stmp.c_str());
|
||||||
stmp=String(system_get_chip_id());
|
stmp=String(ESP.getChipId());
|
||||||
SSDP.setSerialNumber(stmp.c_str());
|
SSDP.setSerialNumber(stmp.c_str());
|
||||||
SSDP.setURL("/");
|
SSDP.setURL("/");
|
||||||
SSDP.setModelName("ESP8266 01");
|
SSDP.setModelName("ESP8266 01");
|
||||||
@ -172,12 +168,13 @@ void setup()
|
|||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
#ifdef CAPTIVE_PORTAL_FEATURE
|
#ifdef CAPTIVE_PORTAL_FEATURE
|
||||||
if (wifi_get_opmode()!=WIFI_STA ) {
|
if (WiFi.getMode()!=WIFI_STA ) {
|
||||||
dnsServer.processNextRequest();
|
dnsServer.processNextRequest();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
//web requests
|
//web requests
|
||||||
web_interface->WebServer.handleClient();
|
web_interface->WebServer.handleClient();
|
||||||
|
|
||||||
//TODO use a method to handle serial also in class and call it instead of this one
|
//TODO use a method to handle serial also in class and call it instead of this one
|
||||||
uint8_t i,data;
|
uint8_t i,data;
|
||||||
#ifdef TCP_IP_DATA_FEATURE
|
#ifdef TCP_IP_DATA_FEATURE
|
||||||
|
@ -46,8 +46,8 @@ extern "C" {
|
|||||||
#define UPLOAD_STATUS_SUCCESSFUL 3
|
#define UPLOAD_STATUS_SUCCESSFUL 3
|
||||||
#define UPLOAD_STATUS_ONGOING 4
|
#define UPLOAD_STATUS_ONGOING 4
|
||||||
|
|
||||||
const char PAGE_404 [] PROGMEM ="<HTML>\n<HEAD>\n<title>Redirecting...</title> \n</HEAD>\n<BODY>\n<CENTER>Unknown page - you will be redirected...\n<BR><BR>\nif not redirected, <a href='http://$WEB_ADDRESS$'>click here</a>\n<BR><BR>\n<PROGRESS name='prg' id='prg'>\n\n<script>\nvar i = 0; \nvar x = document.getElementById(\"prg\"); \nx.max=5; \nvar interval=setInterval(function(){\ni=i+1; \nvar x = document.getElementById(\"prg\"); \nx.value=i; \nif (i>5) \n{\nclearInterval(interval);\nwindow.location.href='/';\n}\n},1000);\n</script>\n</CENTER>\n</BODY>\n</HTML>\n\n";
|
const char PAGE_404 [] PROGMEM ="<HTML>\n<HEAD>\n<title>Redirecting...</title> \n</HEAD>\n<BODY>\n<CENTER>Unknown page - you will be redirected...\n<BR><BR>\nif not redirected, <a href='http://$WEB_ADDRESS$'>click here</a>\n<BR><BR>\n<PROGRESS name='prg' id='prg'></PROGRESS>\n\n<script>\nvar i = 0; \nvar x = document.getElementById(\"prg\"); \nx.max=5; \nvar interval=setInterval(function(){\ni=i+1; \nvar x = document.getElementById(\"prg\"); \nx.value=i; \nif (i>5) \n{\nclearInterval(interval);\nwindow.location.href='/';\n}\n},1000);\n</script>\n</CENTER>\n</BODY>\n</HTML>\n\n";
|
||||||
const char PAGE_RESTART [] PROGMEM ="<HTML>\n<HEAD>\n<title>Restarting...</title> \n</HEAD>\n<BODY>\n<CENTER>Restarting, please wait....\n<BR>\n<PROGRESS name='prg' id='prg'>\n</CENTER>\n<script>\nvar i = 0;\nvar interval; \nvar x = document.getElementById(\"prg\"); \nx.max=40; \ninterval = setInterval(function(){\ni=i+1; \nvar x = document.getElementById(\"prg\"); \nx.value=i; \nif (i>40) \n{\nclearInterval(interval);\nwindow.location.href='/';\n}\n},1000);\n</script>\n</BODY>\n</HTML>\n";
|
const char PAGE_RESTART [] PROGMEM ="<HTML>\n<HEAD>\n<title>Restarting...</title> \n</HEAD>\n<BODY>\n<CENTER>Restarting, please wait....\n<BR>\n<PROGRESS name='prg' id='prg'></PROGRESS>\n</CENTER>\n<script>\nvar i = 0;\nvar interval; \nvar x = document.getElementById(\"prg\"); \nx.max=40; \ninterval = setInterval(function(){\ni=i+1; \nvar x = document.getElementById(\"prg\"); \nx.value=i; \nif (i>40) \n{\nclearInterval(interval);\nwindow.location.href='/';\n}\n},1000);\n</script>\n</BODY>\n</HTML>\n";
|
||||||
const char RESTARTCMD [] PROGMEM ="<script>setTimeout(function(){window.location.href='/RESTART'},3000);</script>";
|
const char RESTARTCMD [] PROGMEM ="<script>setTimeout(function(){window.location.href='/RESTART'},3000);</script>";
|
||||||
const char VALUE_11B[] PROGMEM = "11b";
|
const char VALUE_11B[] PROGMEM = "11b";
|
||||||
const char VALUE_11N[] PROGMEM = "11n";
|
const char VALUE_11N[] PROGMEM = "11n";
|
||||||
@ -339,6 +339,7 @@ char * intTostr(int value)
|
|||||||
bool processTemplate(const char * filename, STORESTRINGS_CLASS & KeysList , STORESTRINGS_CLASS & ValuesList )
|
bool processTemplate(const char * filename, STORESTRINGS_CLASS & KeysList , STORESTRINGS_CLASS & ValuesList )
|
||||||
{
|
{
|
||||||
if(KeysList.size() != ValuesList.size()) { //Sanity check
|
if(KeysList.size() != ValuesList.size()) { //Sanity check
|
||||||
|
Serial.print("Error");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -480,6 +481,7 @@ bool processTemplate(const char * filename, STORESTRINGS_CLASS & KeysList , ST
|
|||||||
//send header with calculated size
|
//send header with calculated size
|
||||||
header_sent=true;
|
header_sent=true;
|
||||||
web_interface->WebServer.sendContent(bufferheader);
|
web_interface->WebServer.sendContent(bufferheader);
|
||||||
|
|
||||||
}
|
}
|
||||||
//send data
|
//send data
|
||||||
web_interface->WebServer.sendContent(buffer2send);
|
web_interface->WebServer.sendContent(buffer2send);
|
||||||
@ -521,6 +523,7 @@ bool processTemplate(const char * filename, STORESTRINGS_CLASS & KeysList , ST
|
|||||||
}
|
}
|
||||||
//send data
|
//send data
|
||||||
web_interface->WebServer.sendContent(buffer2send);
|
web_interface->WebServer.sendContent(buffer2send);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//if we end size calculation loop
|
//if we end size calculation loop
|
||||||
@ -701,6 +704,13 @@ void ProcessNoAlert(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesLi
|
|||||||
|
|
||||||
//root insterface
|
//root insterface
|
||||||
void handle_web_interface_root()
|
void handle_web_interface_root()
|
||||||
|
{
|
||||||
|
static const char HOME_PAGE [] PROGMEM = "HTTP/1.1 301 OK\r\nLocation: /HOME\r\nCache-Control: no-cache\r\n\r\n";
|
||||||
|
web_interface->WebServer.sendContent_P(HOME_PAGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
//root insterface
|
||||||
|
void handle_web_interface_home()
|
||||||
{
|
{
|
||||||
String stmp;
|
String stmp;
|
||||||
long lstatus;
|
long lstatus;
|
||||||
@ -861,7 +871,7 @@ void handle_web_interface_root()
|
|||||||
//IP
|
//IP
|
||||||
stmp = "$IP_CONNECTED["+String(client_counter)+"]$";
|
stmp = "$IP_CONNECTED["+String(client_counter)+"]$";
|
||||||
KeysList.add(stmp.c_str());
|
KeysList.add(stmp.c_str());
|
||||||
ValuesList.add(wifi_config.ip2str((byte *)&station->ip));
|
ValuesList.add(IPAddress((const uint8_t *)&station->ip).toString().c_str());
|
||||||
//increment counter
|
//increment counter
|
||||||
client_counter++;
|
client_counter++;
|
||||||
//go next record
|
//go next record
|
||||||
@ -940,13 +950,13 @@ void handle_web_interface_root()
|
|||||||
if (wifi_get_ip_info(SOFTAP_IF,&info)) {
|
if (wifi_get_ip_info(SOFTAP_IF,&info)) {
|
||||||
//IP address
|
//IP address
|
||||||
KeysList.add(FPSTR(KEY_AP_IP));
|
KeysList.add(FPSTR(KEY_AP_IP));
|
||||||
ValuesList.add(wifi_config.ip2str(info.ip.addr));
|
ValuesList.add(IPAddress((const uint8_t *)&(info.ip.addr)).toString().c_str());
|
||||||
//GW address
|
//GW address
|
||||||
KeysList.add(FPSTR(KEY_AP_GW));
|
KeysList.add(FPSTR(KEY_AP_GW));
|
||||||
ValuesList.add(wifi_config.ip2str(info.gw.addr));
|
ValuesList.add(IPAddress((const uint8_t *)&(info.gw.addr)).toString().c_str());
|
||||||
//Sub Net Mask
|
//Sub Net Mask
|
||||||
KeysList.add(FPSTR(KEY_AP_SUBNET));
|
KeysList.add(FPSTR(KEY_AP_SUBNET));
|
||||||
ValuesList.add(wifi_config.ip2str(info.netmask.addr));
|
ValuesList.add(IPAddress((const uint8_t *)&(info.netmask.addr)).toString().c_str());
|
||||||
} else {
|
} else {
|
||||||
//IP address
|
//IP address
|
||||||
KeysList.add(FPSTR(KEY_AP_IP));
|
KeysList.add(FPSTR(KEY_AP_IP));
|
||||||
@ -1022,7 +1032,6 @@ void handle_web_interface_root()
|
|||||||
ValuesList.add("");
|
ValuesList.add("");
|
||||||
//Firmware & Free Mem, at the end to reflect situation
|
//Firmware & Free Mem, at the end to reflect situation
|
||||||
GetFreeMem(KeysList, ValuesList);
|
GetFreeMem(KeysList, ValuesList);
|
||||||
|
|
||||||
//process the template file and provide list of variables
|
//process the template file and provide list of variables
|
||||||
processTemplate("/home.tpl", KeysList , ValuesList);
|
processTemplate("/home.tpl", KeysList , ValuesList);
|
||||||
//need to clean to speed up memory recovery
|
//need to clean to speed up memory recovery
|
||||||
@ -1525,22 +1534,23 @@ void handle_web_interface_configAP()
|
|||||||
}
|
}
|
||||||
//IP for static IP
|
//IP for static IP
|
||||||
if (!CONFIG::read_buffer(EP_IP_VALUE,ip_sav , IP_LENGTH) ) {
|
if (!CONFIG::read_buffer(EP_IP_VALUE,ip_sav , IP_LENGTH) ) {
|
||||||
sIP=wifi_config.ip2str((byte *)DEFAULT_IP_VALUE);
|
sIP=IPAddress((const uint8_t *)DEFAULT_IP_VALUE).toString();
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
sIP=wifi_config.ip2str(ip_sav);
|
sIP=IPAddress((const uint8_t *)ip_sav).toString();
|
||||||
}
|
}
|
||||||
//GW for static IP
|
//GW for static IP
|
||||||
if (!CONFIG::read_buffer(EP_GATEWAY_VALUE,gw_sav , IP_LENGTH) ) {
|
if (!CONFIG::read_buffer(EP_GATEWAY_VALUE,gw_sav , IP_LENGTH) ) {
|
||||||
sGW=wifi_config.ip2str((byte *)DEFAULT_GATEWAY_VALUE);
|
sGW=IPAddress((const uint8_t *)DEFAULT_GATEWAY_VALUE).toString();
|
||||||
} else {
|
} else {
|
||||||
sGW=wifi_config.ip2str(gw_sav);
|
sGW=IPAddress((const uint8_t *)gw_sav).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
//Subnet for static IP
|
//Subnet for static IP
|
||||||
if (!CONFIG::read_buffer(EP_MASK_VALUE,msk_sav , IP_LENGTH) ) {
|
if (!CONFIG::read_buffer(EP_MASK_VALUE,msk_sav , IP_LENGTH) ) {
|
||||||
sMask=wifi_config.ip2str((byte *)DEFAULT_MASK_VALUE);
|
sMask=IPAddress((const uint8_t *)DEFAULT_MASK_VALUE).toString();
|
||||||
} else {
|
} else {
|
||||||
sMask=wifi_config.ip2str(msk_sav);
|
sMask=IPAddress((const uint8_t *)msk_sav).toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1839,21 +1849,21 @@ void handle_web_interface_configSTA()
|
|||||||
}
|
}
|
||||||
//IP for static IP
|
//IP for static IP
|
||||||
if (!CONFIG::read_buffer(EP_IP_VALUE,ip_sav , IP_LENGTH) ) {
|
if (!CONFIG::read_buffer(EP_IP_VALUE,ip_sav , IP_LENGTH) ) {
|
||||||
sIP=wifi_config.ip2str((byte *)DEFAULT_IP_VALUE);
|
sIP=IPAddress((const uint8_t *)DEFAULT_IP_VALUE).toString();
|
||||||
} else {
|
} else {
|
||||||
sIP=wifi_config.ip2str(ip_sav);
|
sIP=IPAddress((const uint8_t *)ip_sav).toString();
|
||||||
}
|
}
|
||||||
//GW for static IP
|
//GW for static IP
|
||||||
if (!CONFIG::read_buffer(EP_GATEWAY_VALUE,gw_sav , IP_LENGTH) ) {
|
if (!CONFIG::read_buffer(EP_GATEWAY_VALUE,gw_sav , IP_LENGTH) ) {
|
||||||
sGW=wifi_config.ip2str((byte *)DEFAULT_GATEWAY_VALUE);
|
sGW=IPAddress((const uint8_t *)DEFAULT_GATEWAY_VALUE).toString();
|
||||||
} else {
|
} else {
|
||||||
sGW=wifi_config.ip2str(gw_sav);
|
sGW=IPAddress((const uint8_t *)gw_sav).toString();
|
||||||
}
|
}
|
||||||
//Subnet for static IP
|
//Subnet for static IP
|
||||||
if (!CONFIG::read_buffer(EP_MASK_VALUE,msk_sav , IP_LENGTH) ) {
|
if (!CONFIG::read_buffer(EP_MASK_VALUE,msk_sav , IP_LENGTH) ) {
|
||||||
sMask=wifi_config.ip2str((byte *)DEFAULT_MASK_VALUE);
|
sMask=IPAddress((const uint8_t *)DEFAULT_MASK_VALUE).toString();
|
||||||
} else {
|
} else {
|
||||||
sMask=wifi_config.ip2str(msk_sav);
|
sMask=IPAddress((const uint8_t *)msk_sav).toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//Display values
|
//Display values
|
||||||
@ -2534,7 +2544,7 @@ void handleSDFileList()
|
|||||||
//and handle not registred path
|
//and handle not registred path
|
||||||
void handle_not_found()
|
void handle_not_found()
|
||||||
{
|
{
|
||||||
static const char NOT_AUTH_NF [] PROGMEM = "HTTP/1.1 301 OK\r\nLocation: /\r\nCache-Control: no-cache\r\n\r\n";
|
static const char NOT_AUTH_NF [] PROGMEM = "HTTP/1.1 301 OK\r\nLocation: /HOME\r\nCache-Control: no-cache\r\n\r\n";
|
||||||
|
|
||||||
if (!web_interface->is_authenticated()) {
|
if (!web_interface->is_authenticated()) {
|
||||||
web_interface->WebServer.sendContent_P(NOT_AUTH_NF);
|
web_interface->WebServer.sendContent_P(NOT_AUTH_NF);
|
||||||
@ -2833,6 +2843,7 @@ WEBINTERFACE_CLASS::WEBINTERFACE_CLASS (int port):WebServer(port)
|
|||||||
{
|
{
|
||||||
//init what will handle "/"
|
//init what will handle "/"
|
||||||
WebServer.on("/",HTTP_ANY, handle_web_interface_root);
|
WebServer.on("/",HTTP_ANY, handle_web_interface_root);
|
||||||
|
WebServer.on("/HOME",HTTP_ANY, handle_web_interface_home);
|
||||||
WebServer.on("/CONFIGSYS",HTTP_ANY, handle_web_interface_configSys);
|
WebServer.on("/CONFIGSYS",HTTP_ANY, handle_web_interface_configSys);
|
||||||
WebServer.on("/CONFIGAP",HTTP_ANY, handle_web_interface_configAP);
|
WebServer.on("/CONFIGAP",HTTP_ANY, handle_web_interface_configAP);
|
||||||
WebServer.on("/CONFIGSTA",HTTP_ANY, handle_web_interface_configSTA);
|
WebServer.on("/CONFIGSTA",HTTP_ANY, handle_web_interface_configSTA);
|
||||||
|
@ -25,14 +25,13 @@
|
|||||||
#ifdef MDNS_FEATURE
|
#ifdef MDNS_FEATURE
|
||||||
#include <ESP8266mDNS.h>
|
#include <ESP8266mDNS.h>
|
||||||
#endif
|
#endif
|
||||||
extern "C" {
|
|
||||||
#include "user_interface.h"
|
|
||||||
}
|
|
||||||
#ifdef CAPTIVE_PORTAL_FEATURE
|
#ifdef CAPTIVE_PORTAL_FEATURE
|
||||||
#include <DNSServer.h>
|
#include <DNSServer.h>
|
||||||
extern DNSServer dnsServer;
|
extern DNSServer dnsServer;
|
||||||
#endif
|
#endif
|
||||||
|
extern "C" {
|
||||||
|
#include "user_interface.h"
|
||||||
|
}
|
||||||
WIFI_CONFIG::WIFI_CONFIG()
|
WIFI_CONFIG::WIFI_CONFIG()
|
||||||
{
|
{
|
||||||
iweb_port=DEFAULT_WEB_PORT;
|
iweb_port=DEFAULT_WEB_PORT;
|
||||||
@ -65,8 +64,9 @@ const char * WIFI_CONFIG::get_default_hostname()
|
|||||||
return hostname;
|
return hostname;
|
||||||
}
|
}
|
||||||
|
|
||||||
//no strtok so this is simplified version
|
//helper to convert string to IP
|
||||||
//return number of part
|
//do not use IPAddress.fromString() because lack of check point and error result
|
||||||
|
//return number of parts
|
||||||
byte WIFI_CONFIG::split_ip (const char * ptr,byte * part)
|
byte WIFI_CONFIG::split_ip (const char * ptr,byte * part)
|
||||||
{
|
{
|
||||||
if (strlen(ptr)>15 || strlen(ptr)< 7) {
|
if (strlen(ptr)>15 || strlen(ptr)< 7) {
|
||||||
@ -112,16 +112,7 @@ char * WIFI_CONFIG::mac2str(uint8_t mac [WL_MAC_ADDR_LENGTH])
|
|||||||
return macstr;
|
return macstr;
|
||||||
}
|
}
|
||||||
|
|
||||||
//just simple helper to convert IP address to string
|
//safe setup if no connection
|
||||||
char * WIFI_CONFIG::ip2str(IPAddress Ip )
|
|
||||||
{
|
|
||||||
static char ipstr [16];
|
|
||||||
if (0>sprintf(ipstr, "%i.%i.%i.%i",Ip[0],Ip[1],Ip[2],Ip[3])) {
|
|
||||||
strcpy (ipstr, "0.0.0.0");
|
|
||||||
}
|
|
||||||
return ipstr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void WIFI_CONFIG::Safe_Setup()
|
void WIFI_CONFIG::Safe_Setup()
|
||||||
{
|
{
|
||||||
#ifdef CAPTIVE_PORTAL_FEATURE
|
#ifdef CAPTIVE_PORTAL_FEATURE
|
||||||
@ -153,24 +144,52 @@ bool WIFI_CONFIG::Setup()
|
|||||||
int wstatus;
|
int wstatus;
|
||||||
IPAddress currentIP;
|
IPAddress currentIP;
|
||||||
byte bflag=0;
|
byte bflag=0;
|
||||||
|
byte bmode=0;
|
||||||
|
//system_update_cpu_freq(SYS_CPU_160MHZ);
|
||||||
//set the sleep mode
|
//set the sleep mode
|
||||||
if (!CONFIG::read_byte(EP_SLEEP_MODE, &bflag )) {
|
if (!CONFIG::read_byte(EP_SLEEP_MODE, &bflag )) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
wifi_set_sleep_type ((sleep_type_t)bflag);
|
WiFi.setSleepMode ((WiFiSleepType_t)bflag);
|
||||||
sleep_mode=bflag;
|
sleep_mode=bflag;
|
||||||
//AP or client ?
|
//AP or client ?
|
||||||
if (!CONFIG::read_byte(EP_WIFI_MODE, &bflag ) || !CONFIG::read_string(EP_SSID, sbuf , MAX_SSID_LENGTH) ||!CONFIG::read_string(EP_PASSWORD, pwd , MAX_PASSWORD_LENGTH)) {
|
if (!CONFIG::read_byte(EP_WIFI_MODE, &bmode ) || !CONFIG::read_string(EP_SSID, sbuf , MAX_SSID_LENGTH) ||!CONFIG::read_string(EP_PASSWORD, pwd , MAX_PASSWORD_LENGTH)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!CONFIG::read_string(EP_HOSTNAME, hostname , MAX_HOSTNAME_LENGTH)) {
|
if (!CONFIG::read_string(EP_HOSTNAME, hostname , MAX_HOSTNAME_LENGTH)) {
|
||||||
strcpy(hostname,get_default_hostname());
|
strcpy(hostname,get_default_hostname());
|
||||||
}
|
}
|
||||||
//disconnect if connected
|
//DHCP or Static IP ?
|
||||||
WiFi.disconnect();
|
if (!CONFIG::read_byte(EP_IP_MODE, &bflag )) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (bflag==STATIC_IP_MODE) {
|
||||||
|
byte ip_buf[4];
|
||||||
|
//get the IP
|
||||||
|
if (!CONFIG::read_buffer(EP_IP_VALUE,ip_buf , IP_LENGTH)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
IPAddress local_ip (ip_buf[0],ip_buf[1],ip_buf[2],ip_buf[3]);
|
||||||
|
//get the gateway
|
||||||
|
if (!CONFIG::read_buffer(EP_GATEWAY_VALUE,ip_buf , IP_LENGTH)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
IPAddress gateway (ip_buf[0],ip_buf[1],ip_buf[2],ip_buf[3]);
|
||||||
|
//get the mask
|
||||||
|
if (!CONFIG::read_buffer(EP_MASK_VALUE,ip_buf , IP_LENGTH)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
IPAddress subnet (ip_buf[0],ip_buf[1],ip_buf[2],ip_buf[3]);
|
||||||
|
//apply according active wifi mode
|
||||||
|
if (bmode==AP_MODE) {
|
||||||
|
WiFi.softAPConfig( local_ip, gateway, subnet);
|
||||||
|
} else {
|
||||||
|
WiFi.config( local_ip, gateway, subnet);
|
||||||
|
}
|
||||||
|
}
|
||||||
//this is AP mode
|
//this is AP mode
|
||||||
if (bflag==AP_MODE) {
|
if (bmode==AP_MODE) {
|
||||||
|
WiFi.enableSTA(true);
|
||||||
//setup Soft AP
|
//setup Soft AP
|
||||||
WiFi.mode(WIFI_AP);
|
WiFi.mode(WIFI_AP);
|
||||||
WiFi.softAP(sbuf, pwd);
|
WiFi.softAP(sbuf, pwd);
|
||||||
@ -178,7 +197,7 @@ bool WIFI_CONFIG::Setup()
|
|||||||
if (!CONFIG::read_byte(EP_PHY_MODE, &bflag )) {
|
if (!CONFIG::read_byte(EP_PHY_MODE, &bflag )) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
wifi_set_phy_mode((phy_mode_t)bflag);
|
WiFi.setPhyMode((WiFiPhyMode_t)bflag);
|
||||||
//get current config
|
//get current config
|
||||||
struct softap_config apconfig;
|
struct softap_config apconfig;
|
||||||
wifi_softap_get_config(&apconfig);
|
wifi_softap_get_config(&apconfig);
|
||||||
@ -206,6 +225,7 @@ bool WIFI_CONFIG::Setup()
|
|||||||
delay(1000);
|
delay(1000);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
WiFi.enableAP(false);
|
||||||
//setup station mode
|
//setup station mode
|
||||||
WiFi.mode(WIFI_STA);
|
WiFi.mode(WIFI_STA);
|
||||||
WiFi.begin(sbuf, pwd);
|
WiFi.begin(sbuf, pwd);
|
||||||
@ -214,7 +234,7 @@ bool WIFI_CONFIG::Setup()
|
|||||||
if (!CONFIG::read_byte(EP_PHY_MODE, &bflag )) {
|
if (!CONFIG::read_byte(EP_PHY_MODE, &bflag )) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
wifi_set_phy_mode((phy_mode_t)bflag);
|
WiFi.setPhyMode((WiFiPhyMode_t)bflag);
|
||||||
delay(500);
|
delay(500);
|
||||||
byte i=0;
|
byte i=0;
|
||||||
//try to connect
|
//try to connect
|
||||||
@ -244,34 +264,7 @@ bool WIFI_CONFIG::Setup()
|
|||||||
WiFi.hostname(hostname);
|
WiFi.hostname(hostname);
|
||||||
}
|
}
|
||||||
|
|
||||||
//DHCP or Static IP ?
|
|
||||||
if (!CONFIG::read_byte(EP_IP_MODE, &bflag )) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (bflag==STATIC_IP_MODE) {
|
|
||||||
byte ip_buf[4];
|
|
||||||
//get the IP
|
|
||||||
if (!CONFIG::read_buffer(EP_IP_VALUE,ip_buf , IP_LENGTH)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
IPAddress local_ip (ip_buf[0],ip_buf[1],ip_buf[2],ip_buf[3]);
|
|
||||||
//get the gateway
|
|
||||||
if (!CONFIG::read_buffer(EP_GATEWAY_VALUE,ip_buf , IP_LENGTH)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
IPAddress gateway (ip_buf[0],ip_buf[1],ip_buf[2],ip_buf[3]);
|
|
||||||
//get the mask
|
|
||||||
if (!CONFIG::read_buffer(EP_MASK_VALUE,ip_buf , IP_LENGTH)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
IPAddress subnet (ip_buf[0],ip_buf[1],ip_buf[2],ip_buf[3]);
|
|
||||||
//apply according active wifi mode
|
|
||||||
if (wifi_get_opmode()==WIFI_AP || wifi_get_opmode()==WIFI_AP_STA) {
|
|
||||||
WiFi.softAPConfig( local_ip, gateway, subnet);
|
|
||||||
} else {
|
|
||||||
WiFi.config( local_ip, gateway, subnet);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifdef MDNS_FEATURE
|
#ifdef MDNS_FEATURE
|
||||||
// Set up mDNS responder:
|
// Set up mDNS responder:
|
||||||
if (!mdns.begin(hostname)) {
|
if (!mdns.begin(hostname)) {
|
||||||
@ -281,7 +274,7 @@ bool WIFI_CONFIG::Setup()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
//Get IP
|
//Get IP
|
||||||
if (wifi_get_opmode()==WIFI_STA) {
|
if (WiFi.getMode()==WIFI_STA) {
|
||||||
currentIP=WiFi.localIP();
|
currentIP=WiFi.localIP();
|
||||||
} else {
|
} else {
|
||||||
currentIP=WiFi.softAPIP();
|
currentIP=WiFi.softAPIP();
|
||||||
|
@ -44,7 +44,6 @@ public:
|
|||||||
bool Setup();
|
bool Setup();
|
||||||
void Safe_Setup();
|
void Safe_Setup();
|
||||||
char * mac2str(uint8_t mac [WL_MAC_ADDR_LENGTH]);
|
char * mac2str(uint8_t mac [WL_MAC_ADDR_LENGTH]);
|
||||||
char * ip2str(IPAddress Ip );
|
|
||||||
byte split_ip (const char * ptr,byte * part);
|
byte split_ip (const char * ptr,byte * part);
|
||||||
const char * get_default_hostname();
|
const char * get_default_hostname();
|
||||||
const char * get_hostname();
|
const char * get_hostname();
|
||||||
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 368 KiB After Width: | Height: | Size: 368 KiB |
Before Width: | Height: | Size: 1.7 MiB After Width: | Height: | Size: 1.7 MiB |
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 1.5 MiB After Width: | Height: | Size: 1.5 MiB |
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 266 KiB After Width: | Height: | Size: 266 KiB |
Before Width: | Height: | Size: 226 KiB After Width: | Height: | Size: 226 KiB |
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |