Skip to content
This repository has been archived by the owner on Jan 29, 2023. It is now read-only.

Commit

Permalink
v1.3.1 to add support to Teensy 4.1
Browse files Browse the repository at this point in the history
### Releases v1.3.1

1. Add  QNEthernet and NativeEthernet
  • Loading branch information
khoih-prog committed Apr 8, 2022
1 parent 83edb3d commit 0e5f1fa
Show file tree
Hide file tree
Showing 10 changed files with 312 additions and 203 deletions.
5 changes: 5 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
## Table of Contents

* [Changelog](#changelog)
* [Releases v1.3.1](#releases-v131)
* [Releases v1.3.0](#releases-v130)
* [Releases v1.2.3](#releases-v123)
* [Releases v1.2.2](#releases-v122)
Expand All @@ -25,6 +26,10 @@

## Changelog

### Releases v1.3.1

1. Add support to Teensy 4.1 QNEthernet and NativeEthernet

### Releases v1.3.0

1. Add support to `Portenta_H7 Ethernet and WiFi`
Expand Down
77 changes: 61 additions & 16 deletions examples/Alarm/Ethernet/Alarm_Ethernet/Alarm_Ethernet.ino
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,11 @@ void getNTPTime(void)
if (!gotCurrentTime)
{
sendNTPpacket(timeServer); // send an NTP packet to a time server
// wait to see if a reply is available
delay(1000);

// wait for a reply for UDP_TIMEOUT miliseconds
static unsigned long startMs = millis();

while (!Udp.available() && (millis() - startMs) < UDP_TIMEOUT) {}

if (Udp.parsePacket())
{
Expand Down Expand Up @@ -248,7 +251,7 @@ void setup()
Serial.println(DS323X_GENERIC_VERSION);

#if defined(PIN_WIRE_SDA)
// Arduino core, ESP8266, Adafruit
// Arduino core, ESP8266, Adafruit, Teensy
TZ_LOGWARN(F("Default DS323X pinout:"));
TZ_LOGWARN1(F("SDA:"), PIN_WIRE_SDA);
TZ_LOGWARN1(F("SCL:"), PIN_WIRE_SCL);
Expand All @@ -270,6 +273,8 @@ void setup()
TZ_LOGWARN(F("======== USE_PORTENTA_H7_ETHERNET ========"));
#elif USE_NATIVE_ETHERNET
TZ_LOGWARN(F("======== USE_NATIVE_ETHERNET ========"));
#elif USE_QN_ETHERNET
TZ_LOGWARN(F("======== USE_QN_ETHERNET ========"));
#elif USE_ETHERNET_GENERIC
TZ_LOGWARN(F("=========== USE_ETHERNET_GENERIC ==========="));
#elif USE_ETHERNET_ESP8266
Expand All @@ -280,7 +285,7 @@ void setup()
TZ_LOGWARN(F("========================="));
#endif

#if !(USE_NATIVE_ETHERNET || USE_ETHERNET_PORTENTA_H7)
#if !(USE_NATIVE_ETHERNET || USE_QN_ETHERNET || USE_ETHERNET_PORTENTA_H7)
TZ_LOGWARN(F("Default SPI pinout:"));
TZ_LOGWARN1(F("MOSI:"), MOSI);
TZ_LOGWARN1(F("MISO:"), MISO);
Expand Down Expand Up @@ -389,7 +394,7 @@ void setup()
#endif

// For other boards, to change if necessary
#if ( USE_ETHERNET_GENERIC || USE_ETHERNET_ENC || USE_NATIVE_ETHERNET )
#if ( USE_ETHERNET_GENERIC || USE_ETHERNET_ENC )
// Must use library patch for Ethernet, Ethernet2, EthernetLarge libraries

Ethernet.init (USE_THIS_SS_PIN);
Expand All @@ -404,16 +409,9 @@ void setup()

#endif // defined(ESP8266)

#endif // #if !(USE_NATIVE_ETHERNET)


// start the ethernet connection and the server:
// Use DHCP dynamic IP and random mac
uint16_t index = millis() % NUMBER_OF_MAC;
// Use Static IP
//Ethernet.begin(mac[index], ip);
Ethernet.begin(mac[index]);
#endif // #if !(USE_NATIVE_ETHERNET || USE_QN_ETHERNET || USE_ETHERNET_PORTENTA_H7)

#if !(USE_NATIVE_ETHERNET || USE_QN_ETHERNET || USE_ETHERNET_PORTENTA_H7)
// Just info to know how to connect correctly
Serial.println(F("========================="));
Serial.println(F("Currently Used SPI pinout:"));
Expand All @@ -426,9 +424,56 @@ void setup()
Serial.print(F("SS:"));
Serial.println(SS);
Serial.println(F("========================="));
#endif

#if (USE_QN_ETHERNET)
#define USING_DHCP true

#if USING_DHCP
// Start the Ethernet connection, using DHCP
Serial.print("Initialize QNEthernet using DHCP => ");
Ethernet.begin();
#else
// Start the Ethernet connection, using static IP
Serial.print("Initialize QNEthernet using static IP => ");
Ethernet.begin(myIP, myNetmask, myGW);
Ethernet.setDNSServerIP(mydnsServer);
#endif

if (!Ethernet.waitForLocalIP(5000))
{
Serial.println(F("Failed to configure Ethernet"));

if (!Ethernet.linkStatus())
{
Serial.println(F("Ethernet cable is not connected."));
}

// Stay here forever
while (true)
{
delay(1);
}
}

if (!Ethernet.waitForLink(5000))
{
Serial.println(F("Failed to wait for Link"));
}

#else

// start the ethernet connection and the server:
// Use DHCP dynamic IP and random mac
uint16_t index = millis() % NUMBER_OF_MAC;
// Use Static IP
//Ethernet.begin(mac[index], myIP);
Ethernet.begin(mac[index]);

Serial.print(F("Using mac index = "));
Serial.println(index);

#endif

// you're connected now, so print out the data
Serial.print(F("You're connected to the network, IP = "));
Expand All @@ -453,7 +498,7 @@ void setAlarm(void)
// Valid when RTC is already correct
DateTime currentTime = rtc.now();

time_t utc = currentTime.get_time_t();
time_t utc = currentTime.get_time_t();

// Alarm 1 time is 30s from now
DateTime alarm1 = DateTime(utc + 30);
Expand All @@ -470,7 +515,7 @@ void setAlarm(void)
void loop()
{
// Get time from NTP once, then update RTC
// You certainly can make NTP check every hour/day to update RTC ti have better accuracy
// You certainly can make NTP check every hour/day to update RTC to have better accuracy
getNTPTime();

if (!setAlarmDone && gotCurrentTime)
Expand Down
164 changes: 83 additions & 81 deletions examples/Alarm/Ethernet/Alarm_Ethernet/defines.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

// Debug Level from 0 to 4
#define _ETHERNET_WEBSERVER_LOGLEVEL_ 3
#define _TZ_LOGLEVEL_ 1
#define _TZ_LOGLEVEL_ 2

#if ( defined(ARDUINO_PORTENTA_H7_M7) || defined(ARDUINO_PORTENTA_H7_M4) )

Expand Down Expand Up @@ -227,7 +227,8 @@
#if defined(ARDUINO_TEENSY41)
#define BOARD_TYPE "TEENSY 4.1"
// Use true for NativeEthernet Library, false if using other Ethernet libraries
#define USE_NATIVE_ETHERNET true
#define USE_QN_ETHERNET true
#define USE_NATIVE_ETHERNET false
#elif defined(ARDUINO_TEENSY40)
#define BOARD_TYPE "TEENSY 4.0"
#else
Expand Down Expand Up @@ -319,9 +320,6 @@

#include <SPI.h>

//#define USE_ETHERNET_WRAPPER true
#define USE_ETHERNET_WRAPPER false

// Use true for ENC28J60 and UIPEthernet library (https://github.com/UIPEthernet/UIPEthernet)
// Use false for W5x00 and Ethernetx library (https://www.arduino.cc/en/Reference/Ethernet)

Expand All @@ -342,91 +340,93 @@
#define USE_ETHERNET_ESP8266 false
#define USE_ETHERNET_ENC false
#define USE_CUSTOM_ETHERNET false

#if !USE_ETHERNET_WRAPPER

#if ( USE_ETHERNET_GENERIC || USE_ETHERNET_ESP8266 || USE_ETHERNET_ENC || \
USE_NATIVE_ETHERNET || USE_ETHERNET_PORTENTA_H7 )
#ifdef USE_CUSTOM_ETHERNET
#undef USE_CUSTOM_ETHERNET
#endif
#define USE_CUSTOM_ETHERNET false

#if ( USE_ETHERNET_GENERIC || USE_ETHERNET_ESP8266 || USE_ETHERNET_ENC || \
USE_NATIVE_ETHERNET || USE_QN_ETHERNET || USE_ETHERNET_PORTENTA_H7 )
#ifdef USE_CUSTOM_ETHERNET
#undef USE_CUSTOM_ETHERNET
#endif
#define USE_CUSTOM_ETHERNET false
#endif

#if USE_ETHERNET_PORTENTA_H7
#include <Portenta_Ethernet.h>
#include <Ethernet.h>
#warning Using Portenta_Ethernet lib for Portenta_H7.
#define SHIELD_TYPE "Ethernet using Portenta_Ethernet Library"
#elif USE_NATIVE_ETHERNET
#include "NativeEthernet.h"
#warning Using NativeEthernet lib for Teensy 4.1. Must also use Teensy Packages Patch or error
#define SHIELD_TYPE "Custom Ethernet using Teensy 4.1 NativeEthernet Library"
#elif USE_ETHERNET_GENERIC
#if (ESP32)
#include <soc/spi_pins.h>

// Optional SPI2
#define USING_SPI2 true

#if USING_SPI2
#define PIN_MISO HSPI_IOMUX_PIN_NUM_MISO
#define PIN_MOSI HSPI_IOMUX_PIN_NUM_MOSI
#define PIN_SCK HSPI_IOMUX_PIN_NUM_CLK
#define PIN_SS HSPI_IOMUX_PIN_NUM_CS
#if USE_ETHERNET_PORTENTA_H7
#include <Portenta_Ethernet.h>
#include <Ethernet.h>
#warning Using Portenta_Ethernet lib for Portenta_H7.
#define SHIELD_TYPE "Ethernet using Portenta_Ethernet Library"
#elif USE_QN_ETHERNET
#include "QNEthernet.h" // https://github.com/ssilverman/QNEthernet
using namespace qindesign::network;
#warning Using QNEthernet lib for Teensy 4.1. Must also use Teensy Packages Patch or error
#define SHIELD_TYPE "QNEthernet"
#elif USE_NATIVE_ETHERNET
#include "NativeEthernet.h"
#warning Using NativeEthernet lib for Teensy 4.1. Must also use Teensy Packages Patch or error
#define SHIELD_TYPE "NativeEthernet"
#elif USE_ETHERNET_GENERIC
#if (ESP32)
#include <soc/spi_pins.h>

#define SHIELD_TYPE "W5x00 using Ethernet_Generic Library on SPI2"

#else

#define PIN_MISO MISO
#define PIN_MOSI MOSI
#define PIN_SCK SCK
#define PIN_SS SS
// Optional SPI2
#define USING_SPI2 true

#if USING_SPI2
#define PIN_MISO HSPI_IOMUX_PIN_NUM_MISO
#define PIN_MOSI HSPI_IOMUX_PIN_NUM_MOSI
#define PIN_SCK HSPI_IOMUX_PIN_NUM_CLK
#define PIN_SS HSPI_IOMUX_PIN_NUM_CS

#define SHIELD_TYPE "W5x00 using Ethernet_Generic Library on SPI2"

#define SHIELD_TYPE "W5x00 using Ethernet_Generic Library on SPI"

#endif

#else
#define SHIELD_TYPE "W5x00 using Ethernet_Generic Library"

#define PIN_MISO MISO
#define PIN_MOSI MOSI
#define PIN_SCK SCK
#define PIN_SS SS

#define SHIELD_TYPE "W5x00 using Ethernet_Generic Library on SPI"

#endif

#define ETHERNET_LARGE_BUFFERS

#define _ETG_LOGLEVEL_ 1

#include "Ethernet_Generic.h"
#warning Using Ethernet_Generic lib

#elif USE_ETHERNET_ESP8266
#include "Ethernet_ESP8266.h"
#warning Using Ethernet_ESP8266 lib
#define SHIELD_TYPE "W5x00 using Ethernet_ESP8266 Library"
#elif USE_ETHERNET_ENC
#include "EthernetENC.h"
#warning Using EthernetENC lib
#define SHIELD_TYPE "ENC28J60 using EthernetENC Library"
#elif USE_CUSTOM_ETHERNET
//#include "Ethernet_XYZ.h"
#include "EthernetENC.h"
#warning Using Custom Ethernet library. You must include a library and initialize.
#define SHIELD_TYPE "Custom Ethernet using Ethernet_XYZ Library"
#else
#ifdef USE_ETHERNET_GENERIC
#undef USE_ETHERNET_GENERIC
#endif
#define USE_ETHERNET_GENERIC true
#include "Ethernet_Generic.h"
#warning Using default Ethernet_Generic lib
#define SHIELD_TYPE "W5x00 using default Ethernet_Generic Library"
#define SHIELD_TYPE "W5x00 using Ethernet_Generic Library"
#endif

#define ETHERNET_LARGE_BUFFERS

#define _ETG_LOGLEVEL_ 1

// Ethernet_Shield_W5200, EtherCard, EtherSia not supported
// Select just 1 of the following #include if uncomment #define USE_CUSTOM_ETHERNET
// Otherwise, standard Ethernet library will be used for W5x00
#include "Ethernet_Generic.h"
#warning Using Ethernet_Generic lib

#elif USE_ETHERNET_ESP8266
#include "Ethernet_ESP8266.h"
#warning Using Ethernet_ESP8266 lib
#define SHIELD_TYPE "W5x00 using Ethernet_ESP8266 Library"
#elif USE_ETHERNET_ENC
#include "EthernetENC.h"
#warning Using EthernetENC lib
#define SHIELD_TYPE "ENC28J60 using EthernetENC Library"
#elif USE_CUSTOM_ETHERNET
//#include "Ethernet_XYZ.h"
#include "EthernetENC.h"
#warning Using Custom Ethernet library. You must include a library and initialize.
#define SHIELD_TYPE "Custom Ethernet using Ethernet_XYZ Library"
#else
#ifdef USE_ETHERNET_GENERIC
#undef USE_ETHERNET_GENERIC
#endif
#define USE_ETHERNET_GENERIC true
#include "Ethernet_Generic.h"
#warning Using default Ethernet_Generic lib
#define SHIELD_TYPE "W5x00 using default Ethernet_Generic Library"
#endif

// Ethernet_Shield_W5200, EtherCard, EtherSia not supported
// Select just 1 of the following #include if uncomment #define USE_CUSTOM_ETHERNET
// Otherwise, standard Ethernet library will be used for W5x00

#endif // USE_ETHERNET_WRAPPER
#elif USE_UIP_ETHERNET
#include "UIPEthernet.h"
#warning Using UIPEthernet library
Expand Down Expand Up @@ -467,9 +467,11 @@ byte mac[][NUMBER_OF_MAC] =
};

// Select the IP address according to your local network
IPAddress ip(192, 168, 2, 222);
IPAddress myIP(192, 168, 2, 222);
IPAddress myNetmask(255, 255, 255, 0);
IPAddress myGW(192, 168, 2, 1);

// Google DNS Server IP
IPAddress myDns(8, 8, 8, 8);
IPAddress mydnsServer(8, 8, 8, 8);

#endif //defines_h

0 comments on commit 0e5f1fa

Please sign in to comment.