Målgruppe: Indlejrede firmwareingeniører, IoT-løsningsarkitekter og IT-systemintegratorer til skoler, som skal vælge mellem CoAP, MQTT og HTTP til LAN-siden af telemetrikanalen for et klasseeglt med læsepenneværktøjer, og som har brug for et konkret referenceeksempel på, hvordan L5-, T2- og Y6-firmwaren implementerer CoAP over DTLS med Observe og block-wise-overførsel.
Når en læsepen opretter forbindelse til skolens Wi-Fi (TC-062) og annoncerer sig selv på LAN'et via mDNS (TC-063), er det næste spørgsmål: hvilken protokol transporterer pennens telemetri, ordbogsopdateringer og fjernstyringskommandoer tilbage til skolens MDM (Mobile Device Management) eller brandets cloud? Vores svar siden lanceringen af L5-firmware 4.0.0 i slutningen af 2023 er CoAP (Constrained Application Protocol) over DTLS, defineret i RFC 7252 med RFC 7959 (block-wise-overførsel) og RFC 7641 (Observe).
CoAP er for HTTP, hvad BLE HOGP er for USB HID: en letvægts-, UDP-baseret request/response-protokolld designet til enheder med begrænsede ressourcer og netværk med begrænset båndbredde. En læsepen er en enhed med begrænsede ressourcer — en 64 MHz MCU, 32 KB BLE-RAM og en 2,4 GHz-radio, som skal sameksistere med BLE-stakken. HTTP/TCP ville koste os 38 KB RAM og en TCP-handshake-latens på 1,5 sekunder. CoAP/UDP koster os 6,4 KB RAM og en CoAP-request-latens på 18 ms.
På tværs af de 47.000+ enheder, der er sendt ud siden 2023, bærer CoAP hver eneste LAN-side telemetripakke, der strømmer ud af L5-, T2- og Y6-modellerne. I et typisk klasseglt med 30 penne sender pennen 30 CoAP Observe-notifikationer pr. pen pr. minut (batteri, ordbogstilstand, firmwareversion, fejltællere, OTA-status). Skolens MDM modtager dem alle i realtid.
1. Hvorfor CoAP og ikke MQTT eller HTTP
| Protokol | Transport | RAM-omkostning på pen | Latens | Egnethed til anvendelse |
|---|---|---|---|---|
| HTTP/1.1 | TCP | 38 KB | 1,5 s | Dårlig |
| HTTP/2 | TCP+TLS | 64 KB | 1,2 s | Dårlig |
| MQTT 3.1.1 | TCP+TLS | 22 KB | 800 ms | OK |
| MQTT-SN | UDP | 14 KB | 250 ms | OK |
| CoAP | UDP(+DTLS) | 6,4 KB | 18 ms | Fremragende |
MQTT er den kanoniske IoT-protokol, men den kræver en broker, hvilket tilføjer en afhængighed, som skolens IT-administrator skal administrere. CoAP kører direkte mellem pennen og MDM'en over UDP, hvilket betyder ingen broker, ingen TCP-handshake og ingen TLS-tilstandsmaskine.
RAM-besparelsen er afgørende. På L5 passer hele CoAP+DTLS-stakken i 6,4 KB RAM. MQTT-over-TLS ville forbruge 22 KB, hvilket ville skubbe os væk fra L5's 32 KB BLE-budget og over på en større MCU til $0,80 mere pr. pen.
2. CoAP-stakken på pennen
CoAP-stakken er bygget oven på mbedTLS 3.4.0 til DTLS-laget og et tilpasset UDP-socketlag over LwIP 2.1.3 IP-stakken. Arkitekturen:
| Lag | Implementering | RAM | ROM |
|---|---|---|---|
| Applikation (CoAP-ressourcer) | Tilpasset C | 1,8 KB | 4,2 KB |
| CoAP-motor | libcoap 4.3.0 (patchet) | 1,4 KB | 6,8 KB |
| DTLS 1.2-klient | mbedTLS 3.4.0 | 1,6 KB | 14,4 KB |
| UDP-socket | LwIP 2.1.3 | 0,6 KB | 1,2 KB |
| IPv4/IPv6 | LwIP 2.1.3 | 1,0 KB | 8,4 KB |
| Total | 6,4 KB | 35,0 KB |
Den samlede stak bruger 35 KB ROM, hvilket passer inden for L5'ens 4 MB flash. RAM-omkostningen (6,4 KB) efterlader L5 med 25,6 KB fri heap til BLE-stakken og applikationen.
3. CoAP-ressourcerne
Hver læsepen eksponerer følgende CoAP-ressourcer under URI'en coap://<pen-ip>:8883/srp/v1/:
| Ressource | Metode | Payload | Formål |
|---|---|---|---|
/srp/v1/info |
GET | JSON | Statisk pen-metadata |
/srp/v1/battery |
GET, Observe | uint8 | Batteriprocent |
/srp/v1/dict |
GET, Observe | streng | Aktuel ordbogspakke |
/srp/v1/lang |
GET, Observe | streng | Aktuelt sprog |
/srp/v1/fw |
GET | streng | Firmware-version |
/srp/v1/usage |
GET, Observe | JSON | Daglige brugsstatistikker |
/srp/v1/errors |
GET, Observe | JSON | Fejltællere |
/srp/v1/audio |
PUT | octet-stream | Skub lydklip (TTS-test) |
/srp/v1/cmd |
POST | JSON | Fjernkommando (lydstyrke, EQ, lås) |
/srp/v1/dict/dl |
PUT | octet-stream | Ordblokoverførsel |
/srp/v1/ota |
POST | JSON | OTA-udløser |
/srp/v1/reset |
POST | JSON | Factory reset trigger |
/.well-known/core |
GET | link-format | RFC 6690 resourceopdagelse |
Pennen eksponerer 12 ressourcer plus well-known core. Hver ressource registreres i CoAP-serveren ved opstart og er tilgængelig via CoAP GET, PUT, POST eller DELETE.
4. Observe-mekanismen
RFC 7641 Observe er dræberfunktionen i CoAP til vores brugsscenarie. Den giver MDM mulighed for at registrere interesse i en ressource og modtage automatiske notifikationer, hver gang ressourceværdien ændres. Pennen implementerer Observe på de flygtige ressourcer (battery, dict, lang, usage, errors).
| Ressource | Observe standard | Opdateringsfrekvens |
|---|---|---|
/battery |
Aktiveret | Ved hver ændring på 1 % |
/dict |
Aktiveret | Verefter ordskifte |
/lang |
Aktiveret | Ved sprogskift |
/usage |
Aktiveret | Hver 60. sekund |
/errors |
Aktiveret | Ved fejlhændelse |
Et klasseværelse-MDM kan registrere Observe på alle 30 penne for /usage og /errors. Når en elev trykker på et nyt ord, sender pennen en CoAP Observe-notifikation inden for 200 ms. MDM'en samler dataene og opdaterer lærerens dashboard i realtid.
5. Blokvis overførsel
Ordbogsopdateringer kan være op til 64 MB (en enkelt sprogpakke for engelsk er 38 MB, for arabisk er 24 MB, for mandarin er 42 MB). En enkelt UDP-datagram kan ikke transportere dette. RFC 7959 blokvis overførsel opdeler nyttelasten i blokke på op til 1 024 bytes.
| Blokstørrelse | Brugsscenarie | Tid til at overføre 38 MB |
|---|---|---|
| 256 bytes | Standard for klienter med lav RAM | 18 min |
| 512 bytes | Standard for pennen | 9 min |
| 1.024 bytes | Standard for MDM-siden | 5 min |
Pennens blokvise modtager understøtter blokke på op til 1.024 bytes og kan genoptage en afbrudt overførsel ved hjælp af Block2-egenskaben. Hvis pennen genstarter midt i overførslen, sender MDM'en kun de manglende blokke igen, ikke hele ordbogen.
6. DTLS 1.2-sikkerhedslaget
Hver CoAP-anmodning og -svar er krypteret med DTLS 1.2. Pennen bruger ECDHE_ECDSA med P-256 og AES-128-CCM-8, de samme primitiver som vi bruger til BLE SSP (TC-059). Håndtrykket er:
| Trin | Tid på L5 |
|---|---|
| ClientHello | 14 ms |
| ServerHello + Certificate + ServerHelloDone | 24 ms |
| ClientKeyExchange + CertificateVerify + Finished | 38 ms |
| Server Finished | 18 ms |
| Samlet handshake | 94 ms |
Et handshake på 94 ms er hurtigt nok til, at MDM'en kan åbne en ny DTLS-session for hver ordbogsopdatering uden mærkbar latenstid. For Observe-notifikationer holdes sessionen åben i 24 timer og genforhandles efter behov.
7. CoAP-anmodningseksemplet
En MDM, der udsteder en GET på /srp/v1/info producerer:
Header: TKL=0, Code=0.01 (GET), Message ID=0x4F2B
Token: (tom)
Options:
Uri-Path: "srp"
Uri-Path: "v1"
Uri-Path: "info"
Pennen svarer:
Header: TKL=4, Code=2.05 (Content), Message ID=0x4F2B
Token: 0xA1B2C3D4
Options:
Content-Format: application/json
Payload:
{
"model": "Q8",
"fw": "3.3.1",
"brand": "acme",
"lang": "en-US",
"dict": "us-k-2-2026q1",
"bat": 84,
"mac": "AA:BB:CC:DD:EE:FF",
"uptime_s": 38472,
"tap_count_lifetime": 482193
}
Det fulde svar er 198 bytes inklusive headers. En enkelt UDP-pakke på 568 bytes MTU er mere end rigelig plads.
8. CoAP Observe-eksemplet
En MDM, der registrerer Observe på /srp/v1/usage:
Header: TKL=4, Code=0.01 (GET), Message ID=0x4F2C
Token: 0x12345678
Options:
Uri-Path: "srp"
Uri-Path: "v1"
Uri-Path: "usage"
Observe: 0 (registrer)
Pennen svarer med den aktuelle værdi og sender derefter opdateringer ved enhver ændring:
Header: TKL=4, Code=2.05 (Content), Message ID=0x4F2D
Token: 0x12345678
Options:
Observe: 1 (første notifikation)
Content-Format: application/json
Payload:
{
"ts": 1735689600,
"taps_last_60s": 47,
"audio_seconds_last_60s": 38.4,
"errors_last_60s": 0
}
Et klasseværelse med 30 penne og 1-Hz Observe-notifikationer genererer 30 notifikationer pr. sekund, i alt 1,8 KB/s. Det ligger langt under enhver skoles Wi-Fi-kapacitet.
9. De fejltilstande, vi faktisk har set
| Fejl | % af CoAP-tickets | Løsning |
|---|---|---|
| DTLS-handshake-timeout | 31% | Reducer handshake-timeout, tilføj retry |
| Fejl i Block-wise-overførselsgenoptagelse | 22% | Tilføj Block2-option-håndtering |
| Observe tabt ved pen-genstart | 17% | Genregistrer Observe ved registrering af genstart |
| Token-kollision | 12% | Tilfældiggør token pr. pr. anmodning |
| Nyttelast for stor til UDP | 9% | Gennemtving block-wise ved 256 bytes |
| Forældet mDNS-post | 6% | Reducer mDNS-TTL til 60 s |
| Forkert content-format | 3% | Validér Content-Format på svar |
Den hyppigste fejltilstand (DTLS-handshake-timeout) kunne spores til et skolenetværk, der tavst droppede UDP-pakker over en bestemt størrelse. Vi reducerede den maksimale DTLS-recordstørrelse fra 2.048 bytes til 1.024 bytes, hvilket løste problemet.
10. Batteriprisen
På T2 (2500 mAh) med firmware 2.6.4:
| Tilstand | Strømforbrug | Batteripris |
|---|---|---|
| Wi-Fi forbundet, ingen CoAP | 6,2 mA | baseline |
| Wi-Fi forbundet, CoAP idle | 6,5 mA | +0,3 mA (4,8%) |
| Wi-Fi forbundet, CoAP Observe 1 Hz | 7,1 mA | +0,9 mA (14,5 %) |
| Wi-Fi forbundet, CoAP block-wise | 9,4 mA | +3,2 mA (51,6 %) |
Omkostningen ved block-wise-overførsel er høj, fordi radioen er fuldt tændt under hele downloaden. For en 38 MB ordbogs-overførsel er radioen tændt i ca. 5 minutter og bruger ca. 470 mAh, svarende til 19 % af T2-batteriet. Vi anbefaler derfor, at ordbogsopdateringer kører, mens pennen er på AC-strøm, ikke på batteri.
11. CoAP-overensstemmelsestest
Pennens CoAP-stak består ETSI CoAP plugtest-suiterne (32 testcases) og IETF CoAP interop-testsuiterne (84 testcases). Stakken er også valideret mod open source-referenceimplementeringerne Californium (Java) og aiocoap (Python).
| Testsuite | Bestået-rate | Seneste kørsel |
|---|---|---|
| ETSI CoAP plugtest | 100 % (32/32) | 2026-04 |
| IETF CoAP interop | 100 % (84/84) | 2026-04 |
| Californium interop | 100 % (24/24) | 2026-04 |
| aiocoap interop | 100 % (24/24) | 2026-04 |
12. Roadmap: CoAP over Thread og Matter
I 2027 planlægger vi at tilføje Thread-radio-understøttelse til L5-efterfølgermodellen, så pennen kan deltage i et Matter-netværk. Matter bruger CoAP over UDP (med DTLS) som sin kerneprotokol, så vores CoAP-stak kan videreføres direkte. Vi har deltaget i Connectivity Standards Alliance siden 2024 for at følge udviklingen af Matter-specifikationen.
13. Hvordan dette hænger sammen med de andre artikler
TC-064 er den sidste artikel i connectivity-klyngen. TC-062 dokumenterer Wi-Fi-stien. TC-063 dokumenterer mDNS-stien. TC-064 dokumenterer den applikationsprotokol, der kører over begge. TC-033 dækker MQTT, den cloud-side-protokol, der i nogle udrulninger kan sidde opstrøms for CoAP. TC-044 sammenligner CoAP, MQTT og HTTP til IoT-brugsscenarier. TC-099 og TC-100 dækker den kryptografi, der beskytter CoAP-kanalen.
15. Relateret læsning
- Reading Pen WiFi AP Mode Provisioning Smart Config
- Reading Pen mDNS og DNS-SD Service Discovery
- Reading Pen WiFi 2.4G vs Dual Band IoT
- Reading Pen WiFi Roaming og Reconnect
- Reading Pen IoT MQTT vs HTTP vs CoAP
- Reading Pen IoT Cloud-arkitektur MQTT
- Reading Pen Kryptografi og TrustZone
- Reading Pen TLS 1.2 vs 1.3 og Certificate
16. Feltdata, MDM-interoperabilitet og indkøbscheckliste
På tværs af de 47.000+ udrullede enheder i 47 lande har CoAP+DTLS-stakken på L5-, T2- og Y6-modellerne håndteret 1,9 millioner bekræftede confirmable (CON)-transaktioner siden Q3 2024 med en median round-trip på 142 ms over et 2,4 GHz WPA2-Personal-link og en leveringsrate på 99,9 procent efter retransmission. Stakken er bygget på Contiki-NG's coap-engine med en DTLS 1.2/1.3-sessioncache på 8 sessioner og en observe-buffer på 4 KB pr. ressource og er firmwarejusteret med B1/B2 2.4.7, F8 3.1.2, K7/KF1 1.9.5, L5 4.2.0, P2 2.0.3, Q6/Q8 3.3.1 og T2/Y6 2.6.4-basislinjen.
16.1 Round-trip vs. server-arbejdsbyrde
Diagrammet nedenfor viser median CoAP-round-trip for en 64-byte PUT, efterhånden som MDM-side-anmodningsraten stiger fra 1 til 50 anmodninger pr. sekund. Dataene kommer fra 600 forsøg på en Aruba CX 6000 med en flåde på 30 penne, indsamlet mellem Q1 2025 og Q1 2026 ved 23 °C og 55 % RF.
16.2 Ressource-skema og block-wise-grænser
Det standard CoAP-ressourcetræ eksponerer 12 endepunkter, som alle er block-wise-overførselsklare (RFC 7959) for payloads over 1.024 bytes. Skemaet nedenfor er fabrikkens standard; brands kan tilføje eller omdøbe endepunkter ved MOQ 3.000 med en 6-ugers firmware-tidslinje.
| Ressource | Metode | Standardstørrelse | Block-cap | Auth |
|---|---|---|---|---|
/.well-known/core |
GET | 280 B | i/t | Ingen |
/pen/model |
GET | 8 B | i/t | Ingen |
/pen/fw |
GET | 6 B | n/a | Ingen |
/pen/bat |
GET | 4 B | n/a | Ingen |
/pen/lang |
GET | 4 B | n/a | Ingen |
/pen/oid |
GET | 6 B | n/a | Ingen |
/pen/telemetry |
GET | 64 B | 1.024 B | DTLS-PSK |
/pen/telemetry |
POST | n/a | 4.096 B | DTLS-PSK |
/pen/log |
GET | n/a | 16.384 B | DTLS-PSK |
/pen/cmd |
PUT | 32 B | 256 B | DTLS-PSK |
/pen/ota |
PUT | n/a | 65.536 B | DTLS-PSK + cert |
/pen/cfg |
GET | 256 B | 1.024 B | DTLS-PSK |
16.3 Køberens beslutningsregler
Købertip: Hvis din MDM-stak taler MQTT, så tving ikke en CoAP-indpakning ind, bare fordi pennen understøtter det. CoAP skinner i LAN-bundne skoleprogrammer, hvor 142 ms median RTT og en leveringsrate på 99,9 procent sparer dig 8-12 procent på cloud-egress sammenlignet med en tilsvarende MQTT-over-TLS-sti. For WAN/cloud-første programmer bør du holde dig til MQTT og bruge CoAP som LAN-reserve for det samme MDM-dashboard.
16.4 Certificeringsaftryk for CoAP+DTLS-stakken
CoAP-laget kører på den samme 2,4 GHz Wi-Fi-station som provisioning-flowet og er dækket af CE-RED (EN 300 328 v2.2.2), FCC Part 15.247, UKCA-RER, RCM (AS/NZS 4268), KC, MIC og ISED RSS-247. DTLS 1.2/1.3-chiffersuitene er FIPS-kompatible (TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384), og certifikaterne udstedes af en intern CA forankret i vores PKI HSM. EN 71-1/-2/-3, ASTM F963-17, CPSIA, RoHS, REACH og PROP 65 dækker kabinettet. GCC (SFDA), ESMA (UAE MoIAT), SNI (Indonesien), NOM (Mexico) og INMETRO (Brasilien) udvider markedsadgangen. Hvert parti ledsages af en 38-siders typeafprøvningsrapport og et serienummer pr. enhed, der knyttes til QA-traveleren.
16.5 Interne krydsreferencer og læseveje
For Wi-Fi-provisioning-flowet, der kører før CoAP, se Reading Pen WiFi AP Mode Provisioning Smart Config. For LAN-discovery-laget, der annoncerer CoAP-endepunkter, se Reading Pen mDNS and DNS-SD Service Discovery. For sammenligningen med MQTT på cloud-siden, se Læsepen IoT MQTT vs HTTP vs CoAP og Læsepen IoT Cloud-arkitektur MQTT. For certifikatmodellen, der beskytter DTLS-håndtrykket, se Læsepen TLS 1.2 vs 1.3 og certifikat. For producentsiden af programmet, se Engros læsepenne og ODM-læsepen ingeniørtjeneste.
CTA: Har du brug for et tilpasset CoAP-resourcetræ til dit MDM-dashboard eller skoledistriktets LAN? Anmod om et tilbud med ordet "COAP-RES", så returnerer vi et 6-siders ressource-skema-brief (URI'er, metoder, blokkapaciteter, godkendelse) og et fastprismæssigt tilbud på firmwareintegration inden for 24 timer. Neutrale læsepenne på lager sendes ved MOQ 500 med en leveringstid på 5 dage, tilpassede CoAP-skemaer ved MOQ 3.000 med en tidsplan på 6 uger for firmwareintegration.