HI, All
How such code can be used in B4R ? To communicate with a HTTP server over Internet like via WiFi.
Port 4196 is it always constant ?
How such code can be used in B4R ? To communicate with a HTTP server over Internet like via WiFi.
Port 4196 is it always constant ?
B4X:
#include <ETH.h>
#include <WiFiUdp.h>
#define ETH_ADDR 0
#define ETH_POWER_PIN -1
#define ETH_MDC_PIN 23
#define ETH_MDIO_PIN 18
#define ETH_TYPE ETH_PHY_LAN8720
#define ETH_CLK_MODE ETH_CLOCK_GPIO17_OUT
WiFiUDP Udp; //Create UDP object
unsigned int localUdpPort = 4196; //local port
// Set it based on the IP address of the router
IPAddress local_ip(192, 168, 2, 200);
IPAddress gateway(192, 168, 2, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(192, 168, 2, 1);
void setup()
{
Serial.begin(115200);
Serial.println();
ETH.begin(ETH_ADDR, ETH_POWER_PIN, ETH_MDC_PIN, ETH_MDIO_PIN, ETH_TYPE, ETH_CLK_MODE); //start with ETH
// write confir for static IP, gateway,subnet,dns1,dns2
if (ETH.config(local_ip, gateway, subnet, dns, dns) == false) {
Serial.println("LAN8720 Configuration failed.");
}else{Serial.println("LAN8720 Configuration success.");}
/* while(!((uint32_t)ETH.localIP())) //wait for IP
{
}*/
Serial.println("Connected");
Serial.print("IP Address:");
Serial.println(ETH.localIP());
Udp.begin(localUdpPort); //begin UDP listener
}
void loop()
{
int packetSize = Udp.parsePacket(); //get package size
if (packetSize) //if have received data
{
char buf[packetSize];
Udp.read(buf, packetSize); //read current data
Serial.println();
Serial.print("Received: ");
Serial.println(buf);
Serial.print("From IP: ");
Serial.println(Udp.remoteIP());
Serial.print("From Port: ");
Serial.println(Udp.remotePort());
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); //ready to send data
Udp.print("Received: ");
Udp.write((const uint8_t*)buf, packetSize); //copy data to sender buffer
Udp.endPacket(); //send data
}
}
B4X:
#include <ETH.h>
#include <SPI.h>
#define ETH_CLK_MODE ETH_CLOCK_GPIO17_OUT
#define ETH_POWER_PIN -1
#define ETH_TYPE ETH_PHY_LAN8720
#define ETH_ADDR 0
#define ETH_MDC_PIN 23
#define ETH_MDIO_PIN 18
#define NRST 5
static bool eth_connected = false;
void WiFiEvent(WiFiEvent_t event) {
switch (event) {
case SYSTEM_EVENT_ETH_START:
Serial.println("ETH Started");
ETH.setHostname("esp32-ethernet");
break;
case SYSTEM_EVENT_ETH_CONNECTED:
Serial.println("ETH Connected");
break;
case SYSTEM_EVENT_ETH_GOT_IP:
Serial.print("ETH MAC: "); Serial.print(ETH.macAddress());
Serial.print(", IPv4: "); Serial.print(ETH.localIP());
if (ETH.fullDuplex()) {Serial.print(", FULL_DUPLEX");}
Serial.print(", "); Serial.print(ETH.linkSpeed()); Serial.println("Mbps");
eth_connected = true;
break;
case SYSTEM_EVENT_ETH_DISCONNECTED:
Serial.println("ETH Disconnected");
eth_connected = false;
break;
case SYSTEM_EVENT_ETH_STOP:
Serial.println("ETH Stopped");
eth_connected = false;
break;
default:
break;
}
} // WiFiEvent( )
void testClient(const char *host, uint16_t port) {
Serial.print("\nconnecting to "); Serial.println(host);
WiFiClient client;
if (!client.connect(host, port)) {
Serial.println("connection failed");
return;
}
client.printf("GET / HTTP/1.1\r\nHost: %s\r\n\r\n", host);
while (client.connected() && !client.available());
while (client.available()) {
Serial.write(client.read());
}
Serial.println("closing connection\n");
client.stop();
}
void setup() {
Serial.begin(115200);
Serial.println(F("Start Ethernet example..."));
WiFi.onEvent(WiFiEvent);
pinMode(NRST, OUTPUT);
digitalWrite(NRST, 0); delay(200);
digitalWrite(NRST, 1); delay(200);
digitalWrite(NRST, 0); delay(200);
digitalWrite(NRST, 1);
ETH.begin(ETH_ADDR, ETH_POWER_PIN, ETH_MDC_PIN, ETH_MDIO_PIN, ETH_TYPE, ETH_CLK_MODE);
}
void loop() {
if (eth_connected) {
testClient("baidu.com", 80);
}
delay(10000);
}
Last edited: