Skip to content

Commit 0c0d8b0

Browse files
committed
initial commit
0 parents  commit 0c0d8b0

13 files changed

+400
-0
lines changed

.gitignore

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
.pio
2+
.pioenvs
3+
.piolibdeps
4+
.vscode/.browse.c_cpp.db*
5+
.vscode/c_cpp_properties.json
6+
.vscode/launch.json
7+
.vscode/ipch

.travis.yml

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# Continuous Integration (CI) is the practice, in software
2+
# engineering, of merging all developer working copies with a shared mainline
3+
# several times a day < https://docs.platformio.org/page/ci/index.html >
4+
#
5+
# Documentation:
6+
#
7+
# * Travis CI Embedded Builds with PlatformIO
8+
# < https://docs.travis-ci.com/user/integration/platformio/ >
9+
#
10+
# * PlatformIO integration with Travis CI
11+
# < https://docs.platformio.org/page/ci/travis.html >
12+
#
13+
# * User Guide for `platformio ci` command
14+
# < https://docs.platformio.org/page/userguide/cmd_ci.html >
15+
#
16+
#
17+
# Please choose one of the following templates (proposed below) and uncomment
18+
# it (remove "# " before each line) or use own configuration according to the
19+
# Travis CI documentation (see above).
20+
#
21+
22+
23+
#
24+
# Template #1: General project. Test it using existing `platformio.ini`.
25+
#
26+
27+
# language: python
28+
# python:
29+
# - "2.7"
30+
#
31+
# sudo: false
32+
# cache:
33+
# directories:
34+
# - "~/.platformio"
35+
#
36+
# install:
37+
# - pip install -U platformio
38+
# - platformio update
39+
#
40+
# script:
41+
# - platformio run
42+
43+
44+
#
45+
# Template #2: The project is intended to be used as a library with examples.
46+
#
47+
48+
# language: python
49+
# python:
50+
# - "2.7"
51+
#
52+
# sudo: false
53+
# cache:
54+
# directories:
55+
# - "~/.platformio"
56+
#
57+
# env:
58+
# - PLATFORMIO_CI_SRC=path/to/test/file.c
59+
# - PLATFORMIO_CI_SRC=examples/file.ino
60+
# - PLATFORMIO_CI_SRC=path/to/test/directory
61+
#
62+
# install:
63+
# - pip install -U platformio
64+
# - platformio update
65+
#
66+
# script:
67+
# - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N

.vscode/extensions.json

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
// See http://go.microsoft.com/fwlink/?LinkId=827846
3+
// for the documentation about the extensions.json format
4+
"recommendations": [
5+
"platformio.platformio-ide"
6+
]
7+
}

README.md

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
ESP32_W5500_MQTT
2+
================
3+
4+
Simple example of using Arduino Ethernet library with ESP32 and W5500 to subscribe and publish to MQTT broker.
5+
6+
IMPORTANT:
7+
**It has been created to present intermittent connection problems which seems to occur on W5500, but not on WiFi connection.**
8+
9+
## Physical connection between ESP32 and W5500
10+
11+
* GPIO23 <--> MOSI
12+
* GPIO19 <--> MISO
13+
* GPIO18 <--> SCLK
14+
* GPIO5 <--> SCS
15+
* GPIO11 <--> RESET
16+
17+
It is possible to change pins used for chip-select and reset in
18+
`include/MasterConfig.h` file.
19+
20+
21+
## Configuration
22+
23+
Fixed IP address of the device (`ETHERNET_IP`) and MQTT hostname (`MQTT_HOSTNAME`) should most probably be changed in `include/MasterConfig.h` to fit your setup.
24+
Changing other configurations in `MasterConfig.h` is optional.
25+
26+
27+
## Running the test
28+
29+
It has been prepared as PlatformIO project. All dependencies will be automatically downloaded if run with PlatformIO.
30+
31+
Script for publishing messages (so ESP32 has something to read) has been prepared with Bash and Docker. That means it Docker is required for it and it is simple to run on Linux. It may also work with Windows Subsystem for Linux but it has not been tested.
32+
33+
1. Load and run project on ESP32
34+
2. Start script `scripts/mqtt_pub_test.sh [MQTT_HOST]`
35+
3. Observe serial output from ESP32
36+
37+
### Expected results:
38+
- `Sending uptime message to MQTT: mydevice/uptime <- 15` is visible on serial output periodically,
39+
- `Message arrived [mydevice/listen] 2019-06-20T14:25:11` is visible on serial output periodically
40+
- above should happen indefinitely (until network is available).
41+
42+
43+
### Actual results:
44+
45+
- ESP32 gets disconnected from network after some time (time periods differs significantly - from few minutes to couple of hours).
46+
47+
- Log `ERROR: mqttClient has been disconnected. Reconnecting...` is visible on serial output.
48+
49+
Log `Sending uptime message to MQTT` might still be visible on ESP32 serial output, but message with uptime is not send to MQTT broker at that time. This can be observed by subscribing to MQTT broker on `mydevice/uptime` topic. Subscribing to the topic can be easily achieved with `scripts/mosquitto_sub.sh -h [MQTT_HOST] -t "mydevice/uptime"` (requires Bash and Docker).

include/MasterConfig.h

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#define ETHERNET_MAC "BA:E5:E3:B1:44:DD" // Ethernet MAC address (have to be unique between devices in the same network)
2+
#define ETHERNET_IP "10.0.88.244" // IP address of RoomHub when on Ethernet connection
3+
4+
#define ETHERNET_RESET_PIN 11 // ESP32 pin where reset pin from W5500 is connected
5+
#define ETHERNET_CS_PIN 5 // ESP32 pin where CS pin from W5500 is connected
6+
7+
#define MQTT_HOSTNAME "10.0.88.100"
8+
#define MQTT_PORT 1883
9+
10+
#define MQTT_PUBLISH_INTERVAL_MS 5000

include/README

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
2+
This directory is intended for project header files.
3+
4+
A header file is a file containing C declarations and macro definitions
5+
to be shared between several project source files. You request the use of a
6+
header file in your project source file (C, C++, etc) located in `src` folder
7+
by including it, with the C preprocessing directive `#include'.
8+
9+
```src/main.c
10+
11+
#include "header.h"
12+
13+
int main (void)
14+
{
15+
...
16+
}
17+
```
18+
19+
Including a header file produces the same results as copying the header file
20+
into each source file that needs it. Such copying would be time-consuming
21+
and error-prone. With a header file, the related declarations appear
22+
in only one place. If they need to be changed, they can be changed in one
23+
place, and programs that include the header file will automatically use the
24+
new version when next recompiled. The header file eliminates the labor of
25+
finding and changing all the copies as well as the risk that a failure to
26+
find one copy will result in inconsistencies within a program.
27+
28+
In C, the usual convention is to give header files names that end with `.h'.
29+
It is most portable to use only letters, digits, dashes, and underscores in
30+
header file names, and at most one dot.
31+
32+
Read more about using header files in official GCC documentation:
33+
34+
* Include Syntax
35+
* Include Operation
36+
* Once-Only Headers
37+
* Computed Includes
38+
39+
https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html

lib/README

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
2+
This directory is intended for project specific (private) libraries.
3+
PlatformIO will compile them to static libraries and link into executable file.
4+
5+
The source code of each library should be placed in a an own separate directory
6+
("lib/your_library_name/[here are source files]").
7+
8+
For example, see a structure of the following two libraries `Foo` and `Bar`:
9+
10+
|--lib
11+
| |
12+
| |--Bar
13+
| | |--docs
14+
| | |--examples
15+
| | |--src
16+
| | |- Bar.c
17+
| | |- Bar.h
18+
| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
19+
| |
20+
| |--Foo
21+
| | |- Foo.c
22+
| | |- Foo.h
23+
| |
24+
| |- README --> THIS FILE
25+
|
26+
|- platformio.ini
27+
|--src
28+
|- main.c
29+
30+
and a contents of `src/main.c`:
31+
```
32+
#include <Foo.h>
33+
#include <Bar.h>
34+
35+
int main (void)
36+
{
37+
...
38+
}
39+
40+
```
41+
42+
PlatformIO Library Dependency Finder will find automatically dependent
43+
libraries scanning project source files.
44+
45+
More information about PlatformIO Library Dependency Finder
46+
- https://docs.platformio.org/page/librarymanager/ldf.html

platformio.ini

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
; PlatformIO Project Configuration File
2+
;
3+
; Build options: build flags, source filter
4+
; Upload options: custom upload port, speed and extra flags
5+
; Library options: dependencies, extra library storages
6+
; Advanced options: extra scripting
7+
;
8+
; Please visit documentation for the other options and examples
9+
; https://docs.platformio.org/page/projectconf.html
10+
11+
[env:esp32doit-devkit-v1]
12+
platform = espressif32
13+
board = esp32doit-devkit-v1
14+
framework = arduino
15+
lib_deps =
16+
Ethernet
17+
PubSubClient
18+
upload_port = /dev/ttyUSB0
19+
20+
monitor_speed = 115200

scripts/mosquitto_pub.sh

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#/bin/bash
2+
3+
docker run --name mosquitto_pub -it --rm --net=host eclipse-mosquitto mosquitto_pub $@

scripts/mosquitto_sub.sh

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#/bin/bash
2+
3+
trap_ctrlc ()
4+
{
5+
# perform cleanup here
6+
echo "\n\n"
7+
echo "Removing docker container"
8+
docker kill mosquitto_sub
9+
echo "Cleanup done"
10+
}
11+
12+
trap "trap_ctrlc" 2
13+
14+
docker run -d --name mosquitto_sub --rm --net=host eclipse-mosquitto mosquitto_sub $@
15+
docker logs -f mosquitto_sub

scripts/mqtt_pub_test.sh

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/bin/bash
2+
3+
SCRIPT_DIR="$( cd "$( dirname "$0" )" && pwd )"
4+
5+
MQTT_HOST=$1
6+
7+
while true; do
8+
currentDate=`date '+%Y-%m-%dT%H:%M:%S'`;
9+
$SCRIPT_DIR/mosquitto_pub.sh -h $MQTT_HOST -t "mydevice/listen" -m "$currentDate" -r;
10+
echo "mydevice/listen <- $currentDate";
11+
sleep 5;
12+
done

0 commit comments

Comments
 (0)