Differences

This shows you the differences between two versions of the page.

Link to this comparison view

iothings:laboratoare:2025_code:lab4_1 [2025/10/21 11:37] (current)
dan.tudose created
Line 1: Line 1:
 +<code C main.cpp>​
 +#include <​Arduino.h>​
 +#include <​WiFi.h>​
 +#include <​WiFiUdp.h>​
 +#include <​coap-simple.h> ​  // hirotakaster/​CoAP simple library
 +
 +// ===== Wi-Fi creds =====
 +const char* WIFI_SSID = "​UPB-Guest";​
 +const char* WIFI_PASS = "";​
 +
 +// ===== CoAP server (Californium demo) =====
 +const char* COAP_HOST = "​californium.eclipseprojects.io";​
 +const uint16_t COAP_PORT = 5683;   // RFC 7252 default port
 +
 +// UDP + CoAP objects
 +WiFiUDP udp;
 +Coap coap(udp);
 +
 +// ----- Response callback: prints payload as text -----
 +void onCoapResponse(CoapPacket &​packet,​ IPAddress ip, int port) {
 +  // Copy payload into a printable buffer
 +  const size_t n = packet.payloadlen;​
 +  String from = ip.toString() + ":"​ + String(port);​
 +  Serial.printf("​[CoAP] Response from %s  code=%u (0x%02X) ​ len=%u\n",​
 +                from.c_str(),​ (packet.code >> 5), packet.code,​ (unsigned)n);​
 +
 +  if (n > 0) {
 +    // Make it printable; not all payloads are ASCII
 +    size_t m = n;
 +    if (m > 1023) m = 1023;     // clamp for serial
 +    char buf[1024];
 +    memcpy(buf, packet.payload,​ m);
 +    buf[m] = '​\0';​
 +    Serial.println(F("​[CoAP Payload]"​));​
 +    Serial.println(buf);​
 +  }
 +}
 +
 +// Re-resolves hostname and sends GET to "/"​
 +bool coapGetRoot() {
 +  IPAddress remote;
 +  if (!WiFi.hostByName(COAP_HOST,​ remote)) {
 +    Serial.println(F("​[CoAP] DNS failed"​));​
 +    return false;
 +  }
 +  Serial.printf("​[CoAP] GET coap://​%s:​%u/​\n",​ COAP_HOST, COAP_PORT);
 +  // Path is ""​ for "/",​ per library examples
 +  int msgid = coap.get(remote,​ COAP_PORT, ""​);​
 +  (void)msgid;​ // not used further in this demo
 +  return true;
 +}
 +
 +unsigned long lastGetMs = 0;
 +const unsigned long GET_PERIOD_MS = 10000;
 +
 +void setup() {
 +  Serial.begin(115200);​
 +  delay(200);
 +  Serial.println(F("​\n== CoAP client (Californium demo) =="));
 +
 +  // Wi-Fi
 +  WiFi.mode(WIFI_STA);​
 +  WiFi.begin(WIFI_SSID,​ WIFI_PASS);
 +  Serial.print(F("​Connecting"​));​
 +  while (WiFi.status() != WL_CONNECTED) { delay(300); Serial.print('​.'​);​ }
 +  Serial.println();​
 +  Serial.print(F("​Wi-Fi OK. IP: ")); Serial.println(WiFi.localIP());​
 +
 +  // Bind UDP so we can receive responses (use standard CoAP port or 0 for ephemeral)
 +  udp.begin(5683);​
 +
 +  // Register response handler and start CoAP
 +  coap.response(onCoapResponse);​
 +  coap.start();​
 +
 +  // First GET right away
 +  coapGetRoot();​
 +  lastGetMs = millis();
 +}
 +
 +void loop() {
 +  // Let the library process incoming UDP (and fire onCoapResponse)
 +  coap.loop();​
 +
 +  // Periodic GET
 +  unsigned long now = millis();
 +  if (now - lastGetMs >= GET_PERIOD_MS) {
 +    lastGetMs = now;
 +    coapGetRoot();​
 +  }
 +}
 +
 +</​code>​
  
iothings/laboratoare/2025_code/lab4_1.txt · Last modified: 2025/10/21 11:37 by dan.tudose
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0