Hedef Kitle:Sınıftaki okuma kalemlerinin LAN tarafı telemetri kanalı için CoAP, MQTT ve HTTP arasında karar vermesi gereken ve L5, T2 ve Y6 firmware'inin DTLS üzerinden Observe ve block-wise transfer ile CoAP'ı nasıl uyguladığına dair somut bir referansa ihtiyaç duyan gömülü firmware mühendisleri, IoT çözüm mimarları ve okul BT sistem entegratörleri.
Bir okuma kalemi okul Wi-Fi ağına (TC-062) katılıp LAN'da mDNS (TC-063) üzerinden kendini duyurduktan sonra, bir sonraki soru şudur: kalemin telemetrisini, sözlük güncellemelerini ve uzaktan kontrol komutlarını okulun MDM'ine (Mobile Device Management) veya marka bulutuna hangi protokol taşır? L5 firmware 4.0.0 sürümünün 2023 sonunda piyasaya sürülmesinden bu yana bizim cevabımız, RFC 7252 ile tanımlanan ve RFC 7959 (block-wise transfer) ile RFC 7641 (Observe) ile genişletilen DTLS üzerinden CoAP (Constrained Application Protocol) olmuştur.
CoAP, HTTP için ne ise BLE HOGP de USB HID için odur: kısıtlı cihazlar ve kısıtlı ağlar için tasarlanmış hafif, UDP tabanlı, istek/yanıt protokolü. Bir okuma kalemi kısıtlı bir cihazdır — 64 MHz MCU, 32 KB BLE RAM ve BLE yığını ile uyumlu çalışması gereken 2.4 GHz radyo. HTTP/TCP bize 38 KB RAM ve 1,5 saniyelik TCP handshake gecikmesi maliyeti getirirdi. CoAP/UDP ise bize 6,4 KB RAM ve 18 ms CoAP istek gecikmesi olarak mal olur.
2023'ten bu yana sevk edilen 47.000+ adet ünite genelinde CoAP, L5, T2 ve Y6 modellerinden çıkan her LAN tarafı telemetri paketini taşır. Tipik bir 30 kalemlik sınıfta, kalem her kalem için dakikada 30 CoAP Observe bildirimi gönderir (pil, sözlük durumu, firmware sürümü, hata sayıları, OTA durumu). Okulun MDM'si bunların tümünü gerçek zamanlı olarak tüketir.
1. Neden CoAP ve Neden MQTT veya HTTP Değil
| Protokol | Taşıma | Kalem Üzerinde RAM Maliyeti | Gecikme | Kullanım Alanı Uyumu |
|---|---|---|---|---|
| HTTP/1.1 | TCP | 38 KB | 1,5 sn | Kötü |
| HTTP/2 | TCP+TLS | 64 KB | 1,2 sn | Kötü |
| MQTT 3.1.1 | TCP+TLS | 22 KB | 800 ms | Orta |
| MQTT-SN | UDP | 14 KB | 250 ms | Orta |
| CoAP | UDP(+DTLS) | 6,4 KB | 18 ms | Mükemmel |
MQTT kabul görmüş IoT protokolüdür, ancak bir broker gerektirir ve bu da okul BT yöneticisinin yönetmesi gereken ek bir bağımlılık ekler. CoAP, kalem ile MDM arasında doğrudan UDP üzerinden çalışır; bu da broker yok, TCP handshake yok ve TLS durum makinesi yok demektir.
RAM tasarrufu belirleyicidir. L5'te tüm CoAP+DTLS yığını 6,4 KB RAM'e sığar. MQTT-over-TLS ise 22 KB tüketirdi; bu da bizi L5'in 32 KB BLE bütçesinden çıkarıp kalem başına 0,80 ABD doları daha pahalıya, daha büyük bir MCU'ya geçmeye zorlardı.
2. Kalem Üzerindeki CoAP Yığını
CoAP yığını, DTLS katmanı için mbedTLS 3.4.0 ve LwIP 2.1.3 IP yığını üzerinde özel bir UDP soket katmanı üzerine inşa edilmiştir. Mimari:
| Katman | Uygulama | RAM | ROM |
|---|---|---|---|
| Uygulama (CoAP kaynakları) | Özel C | 1,8 KB | 4,2 KB |
| CoAP motoru | libcoap 4.3.0 (yama uygulanmış) | 1,4 KB | 6,8 KB |
| DTLS 1.2 istemcisi | mbedTLS 3.4.0 | 1,6 KB | 14,4 KB |
| UDP soketi | LwIP 2.1.3 | 0,6 KB | 1,2 KB |
| IPv4/IPv6 | LwIP 2.1.3 | 1.0 KB | 8.4 KB |
| Toplam | 6.4 KB | 35.0 KB |
Toplam yığın 35 KB ROM kullanır; bu, L5'in 4 MB flash belleğine sığar. RAM maliyeti (6.4 KB), L5'te BLE yığını ve uygulama için 25.6 KB boş heap bırakır.
3. CoAP Kaynakları
Her okuma kalemi, URI altında aşağıdaki CoAP kaynaklarını sunar coap://<pen-ip>:8883/srp/v1/:
| Kaynak | Yöntem | Yük | Amaç |
|---|---|---|---|
/srp/v1/info |
GET | JSON | Statik kalem meta verileri |
/srp/v1/battery |
GET, Observe | uint8 | Pil yüzdesi |
/srp/v1/dict |
GET, Observe | string | Geçerli sözlük paketi |
/srp/v1/lang |
GET, Observe | string | Geçerli dil |
/srp/v1/fw |
GET | string | Aygıt yazılımı sürümü |
/srp/v1/usage |
GET, Observe | JSON | Günlük kullanım istatistikleri |
/srp/v1/errors |
GET, Observe | JSON | Hata sayaçları |
/srp/v1/audio |
PUT | octet-stream | Ses klibi gönder (TTS testi) |
/srp/v1/cmd |
POST | JSON | Uzaktan komut (ses seviyesi, EQ, kilit) |
/srp/v1/dict/dl |
PUT | octet-stream | Sözlük bloğu aktarımı |
/srp/v1/ota |
POST | JSON | OTA tetikleyici |
/srp/v1/reset |
POST | JSON | Fabrika sıfırlama tetikleyicisi |
/.well-known/core |
GET | link-format | RFC 6690 kaynak keşfi |
Kalem, well-known core'un yanı sıra 12 kaynağı dışa aktarır. Her kaynak, açılışta CoAP sunucusuna kaydedilir ve CoAP GET, PUT, POST veya DELETE aracılığıyla erişilebilir.
4. Observe Mekanizması
RFC 7641 Observe, bizim kullanım senaryomuz için CoAP'ın en güçlü özelliğidir. MDM'nin bir kaynağa ilgi kaydetmesine ve kaynak değeri her değiştiğinde otomatik bildirimler almasına olanak tanır. Kalem, Observe'ı uçucu kaynaklar üzerinde uygular (battery, dict, lang, usage, errors).
| Kaynak | Observe Varsayılan | Güncelleme Sıklığı |
|---|---|---|
/battery |
Etkin | Her %1 değişiklikte |
/dict |
Etkin | Sözlük değişiminde |
/lang |
Etkin | Dil değişiminde |
/usage |
Etkin | Her 60 saniyede bir |
/errors |
Etkin | Hata olayında |
Bir sınıf MDM'si, 30 kalem için Observe'ı /usage ve /errors üzerinde kaydedebilir. Bir öğrenci yeni bir kelimeye dokunduğunda, kalem 200 ms içinde bir CoAP Observe bildirimi gönderir. MDM verileri toplar ve öğretmenin gösterge panelini gerçek zamanlı olarak günceller.
5. Blok-Bloklu Aktarım
Sözlük güncellemeleri 64 MB'a kadar olabilir (İngilizce için tek bir dil paketi 38 MB, Arapça için 24 MB, Mandarin için 42 MB'dir). Tek bir UDP datagramı bunu taşıyamaz. RFC 7959 blok-bloklu aktarım, yükü en fazla 1.024 baytlık bloklara böler.
| Blok Boyutu | Kullanım Senaryosu | 38 MB Aktarım Süresi |
|---|---|---|
| 256 bayt | Düşük RAM'li istemciler için varsayılan | 18 dakika |
| 512 bayt | Kalem tarafı için varsayılan | 9 dakika |
| 1.024 bayt | MDM tarafı için varsayılan | 5 dakika |
Kalemin blok-bloklu alıcısı 1.024 bayta kadar olan blokları destekler ve Block2 seçeneğini kullanarak kesilen bir aktarımı sürdürebilir. Kalem aktarım ortasında yeniden başlarsa, MDM yalnızca eksik blokları yeniden gönderir, tüm sözlüğü değil.
6. DTLS 1.2 Güvenlik Katmanı
Her CoAP isteği ve yanıtı DTLS 1.2 ile şifrelenir. Kalem, ECDHE_ECDSA'yı P-256 ve AES-128-CCM-8 ile kullanır; bunlar BLE SSP için kullandığımız aynı temel bileşenlerdir (TC-059). El sıkışma süreci şu şekildedir:
| Adım | L5 Üzerindeki Süre |
|---|---|
| ClientHello | 14 ms |
| ServerHello + Sertifika + ServerHelloDone | 24 ms |
| ClientKeyExchange + CertificateVerify + Finished | 38 ms |
| Server Finished | 18 ms |
| Toplam el sıkışma | 94 ms |
94 ms'lik bir el sıkışma, MDM'nin her sözlük güncellemesi için fark edilir bir gecikme olmadan yeni bir DTLS oturumu açması için yeterince hızlıdır. Observe bildirimleri için oturum 24 saat boyunca açık tutulur ve talep üzerine yeniden müzakere edilir.
7. CoAP İstek Örneği
Bir MDM'nin /srp/v1/info üzerinde GET yayınlaması şu sonucu üretir:
Header: TKL=0, Code=0.01 (GET), Message ID=0x4F2B
Token: (empty)
Options:
Uri-Path: "srp"
Uri-Path: "v1"
Uri-Path: "info"
Kalem şu şekilde yanıt verir:
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
}
Başlıklar dahil tam yanıt 198 bayttır. 568 bayt MTU'luk tek bir UDP paketi rahatlıkla sığdırır.
8. CoAP Observe Örneği
Bir MDM'nin /srp/v1/usage:
Başlık: TKL=4, Kod=0.01 (GET), Mesaj Kimliği=0x4F2C
Belirteç: 0x12345678
Seçenekler:
Uri-Yolu: "srp"
Uri-Yolu: "v1"
Uri-Yolu: "usage"
Observe: 0 (kayıt)
Header: TKL=4, Code=0.01 (GET), Message ID=0x4F2C Token: 0x12345678 Options: Uri-Path: "srp" Uri-Path: "v1" Uri-Path: "usage" Observe: 0 (register)
Başlık: TKL=4, Kod=2.05 (İçerik), Mesaj Kimliği=0x4F2D
Belirteç: 0x12345678
Seçenekler:
Observe: 1 (ilk bildirim)
İçerik-Formatı: application/json
Yük:
{
"ts": 1735689600,
"taps_last_60s": 47,
"audio_seconds_last_60s": 38.4,
"errors_last_60s": 0
}
Header: TKL=4, Code=2.05 (Content), Message ID=0x4F2D Token: 0x12345678 Options: Observe: 1 (first notification) Content-Format: application/json Payload: { "ts": 1735689600, "taps_last_60s": 47, "audio_seconds_last_60s": 38.4, "errors_last_60s": 0 }
30 kalemlik bir sınıf, 1 Hz Observe bildirimleriyle saniyede 30 bildirim üretir ve toplamda 1,8 KB/s eder. Bu, herhangi bir okulun Wi-Fi kapasitesinin rahatlıkla altındadır.
| 9. Gerçekte Karşılaştığımız Hata Modları | CoAP Biletlerinin %'si | CoAP Taleplerinin %'si |
|---|---|---|
| DTLS el sıkışma zaman aşımı | DTLS el sıkışma zaman aşımı | El sıkışma zaman aşımını azaltın, yeniden deneme ekleyin |
| El sıkışma zaman aşımını düşürün, yeniden deneme ekleyin | Block-wise aktarım devam ettirme hatası | %22 |
| Block2 seçeneği işlemeyi ekleyin | Kalem yeniden başlatmasında Observe kaybı | Yeniden başlatma algılamada Observe'ı yeniden kaydedin |
| Yeniden başlatma algılamasında Observe'u yeniden kaydedin | Token çakışması | İstek başına belirteci rastgeleleştirin |
| Her istek için token'ı rastgele hale getirin | UDP için çok büyük payload | 256 baytta blok blok transferi zorla |
| 256 baytta block-wise'ı zorla | mDNS eski girişi | mDNS TTL süresini 60 saniyeye düşürün |
| mDNS TTL'yi 60 s'ye düşürün | Yanlış içerik formatı | Yanıtta İçerik Formatını doğrulayın |
En yaygın hata modu (DTLS el sıkışma zaman aşımı), belirli bir boyutun üzerindeki UDP paketlerini sessizce reddeden bir okul ağına dayandırıldı. Maksimum DTLS kayıt boyutunu 2.048 bayttan 1.024 bayta düşürdük ve sorunu çözdük.
10. Pil Maliyeti
10. Pil Maliyeti
| T2 (2500 mAh), firmware 2.6.4 ile çalışırken: | Akım Çekişi | Akım Çekimi |
|---|---|---|
| Pil Maliyeti | Wi-Fi bağlı, CoAP yok | 6,2 mA |
| Wi-Fi bağlı, CoAP boşta | Wi-Fi bağlı, CoAP boşta | +0,3 mA (%4,8) |
| Wi-Fi bağlantılı, CoAP Observe 1 Hz | 7,1 mA | +0,9 mA (%14,5) |
| Wi-Fi bağlantılı, CoAP block-wise | 9,4 mA | +3,2 mA (%51,6) |
Block-wise transfer maliyeti yüksektir çünkü indirme süresi boyunca radyo tamamen açık kalır. 38 MB'lık bir sözlük transferi için radyo yaklaşık 5 dakika açık kalır ve ~470 mAh tüketir; bu da T2 pilinin %19'una denk gelir. Bu nedenle sözlük güncellemelerinin kalem AC güçteyken yapılmasını, pille çalışırken yapılmamasını öneriyoruz.
11. CoAP Uyumluluk Testi
Kalemin CoAP yığını, ETSI CoAP plugtest paketini (32 test senaryosu) ve IETF CoAP birlikte çalışabilirlik test paketini (84 test senaryosu) başarıyla geçer. Yığın ayrıca açık kaynak Californium (Java) ve aiocoap (Python) referans uygulamalarına karşı da doğrulanmıştır.
| Test Paketi | Başarı Oranı | Son Çalıştırma |
|---|---|---|
| ETSI CoAP plugtest | %100 (32/32) | 2026-04 |
| IETF CoAP birlikte çalışabilirlik | %100 (84/84) | 2026-04 |
| Californium birlikte çalışabilirlik | %100 (24/24) | 2026-04 |
| aiocoap birlikte çalışabilirlik | %100 (24/24) | 2026-04 |
12. Yol Haritası: Thread ve Matter Üzerinden CoAP
2027'de L5 halef modeline Thread radyo desteği ekleyerek kalemin bir Matter ağına katılmasını sağlamayı planlıyoruz. Matter, çekirdek protokol olarak UDP üzerinden CoAP'yi (DTLS ile birlikte) kullanır; bu nedenle CoAP yığınımız doğrudan taşınabilir olacaktır. Matter spesifikasyonunun gelişimini takip etmek için 2024'ten bu yana Connectivity Standards Alliance'a üyeyiz.
13. Bunun Diğer Makalelerle Bağlantısı
TC-064, bağlantı kümesinin son makalesidir. TC-062, Wi-Fi yolunu belgeler. TC-063, mDNS yolunu belgeler. TC-064, her ikisinin üzerinde çalışan uygulama protokolünü belgeler. TC-033, bazı dağıtımlarda CoAP'nin yukarı akışında yer alabilen bulut tarafı protokol olan MQTT'yi kapsar. TC-044, IoT kullanım senaryoları için CoAP, MQTT ve HTTP'yi karşılaştırır. TC-099 ve TC-100, CoAP kanalını koruyan kriptografiyi ele alır.
15. İlgili Okumalar
- Okuma Kalemi WiFi AP Modu Provisioning Smart Config
- Okuma Kalemi mDNS ve DNS-SD Servis Keşfi
- Okuma Kalemi WiFi 2.4G ve Çift Bantlı IoT
- Okuma Kalemi WiFi Roaming ve Yeniden Bağlanma
- Okuma Kalemi IoT MQTT vs HTTP vs CoAP
- Okuma Kalemi IoT Bulut Mimarisi MQTT
- Okuma Kalemi Kriptografi ve TrustZone
- Okuma Kalemi TLS 1.2 vs 1.3 ve Sertifika
16. Saha Dağıtım Verileri, MDM Birlikte Çalışabilirliği ve Tedarik Kontrol Listesi
47 ülkedeki 47.000'den fazla dağıtılmış birimde, L5, T2 ve Y6 modellerindeki CoAP+DTLS yığını, Q3 2024'ten bu yana 1,9 milyon onaylanmış-onaylanabilir (CON) işlem taşımıştır; 2,4 GHz WPA2-Personal bağlantısında ortanca gidiş-dönüş süresi 142 ms ve yeniden iletim sonrası %99,9 teslimat oranı elde edilmiştir. Yığın, 8 oturumluk bir DTLS 1.2/1.3 oturum önbelleği ve kaynak başına 4 KB'lık bir observe arabelleği ile Contiki-NG'nin coap-engine altyapısı üzerine kuruludur ve 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 ve T2/Y6 2.6.4 temel yazılım sürümleriyle uyumludur.
16.1 Gidiş-Dönüş Süresi ve Sunucu İş Yükü
Aşağıdaki grafik, MDM tarafı istek hızı saniyede 1'den 50'ye çıkarken 64 baytlık bir PUT için ortanca CoAP gidiş-dönüş süresini gösterir. Veriler, 23°C ve %55 bağıl nemde Q1 2025 ile Q1 2026 arasında 30 kalemlik bir filo ile Aruba CX 6000 üzerinde gerçekleştirilen 600 denemeden elde edilmiştir.
16.2 Kaynak Şeması ve Block-Wise Limitleri
Varsayılan CoAP kaynak ağacı 12 uç nokta sunar ve bunların tümü 1.024 baytın üzerindeki yükler için block-wise transfer (RFC 7959) özelliğini destekler. Aşağıdaki şema fabrika varsayılanıdır; markalar MOQ 3.000 altında ve 6 haftalık ürün yazılımı takvimiyle uç noktaları ekleyebilir veya yeniden adlandırabilir.
| Kaynak | Yöntem | Varsayılan Boyut | Block Üst Sınırı | Yetkilendirme |
|---|---|---|---|---|
/.well-known/core |
GET | 280 B | n/a | Yok |
/pen/model |
GET | 8 B | n/a | Yok |
/pen/fw |
GET | 6 B | n/a | None |
/pen/bat |
GET | 4 B | n/a | None |
/pen/lang |
GET | 4 B | n/a | None |
/pen/oid |
GET | 6 B | n/a | None |
/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 Alıcı Karar Kuralları
Alıcı tavsiyesi: MDM yığınınız MQTT konuşuyorsa, kalem onu destekliyor diye bir CoAP sarmalayıcı zorlamayın. CoAP, 142 ms ortanca RTT ve %99,9 teslimat oranıyla, eşdeğer MQTT-over-TLS yoluna kıyasla bulut çıkışında %8-12 tasarruf sağladığı LAN'a bağlı okul programlarında parlar. WAN/bulut-öncelikli programlar için MQTT'de kalın ve CoAP'ı aynı MDM gösterge paneli için LAN yedek seçeneği olarak saklayın.
16.4 CoAP+DTLS Yığınının Sertifikasyon Ayak İzi
CoAP katmanı, sağlama akışıyla aynı 2,4 GHz Wi-Fi istasyonu üzerinde çalışır ve CE-RED (EN 300 328 v2.2.2), FCC Part 15.247, UKCA-RER, RCM (AS/NZS 4268), KC, MIC ve ISED RSS-247 kapsamındadır. DTLS 1.2/1.3 şifre paketleri FIPS uyumludur (TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) ve sertifikalar PKI HSM'imizde ankrajlanmış dahili bir CA tarafından düzenlenir. EN 71-1/-2/-3, ASTM F963-17, CPSIA, RoHS, REACH ve PROP 65 muhafazayı kapsar. GCC (SFDA), ESMA (BAE MoIAT), SNI (Endonezya), NOM (Meksika) ve INMETRO (Brezilya) pazar erişimini genişletir. Her parti, 38 sayfalık bir Tip İnceleme Raporu ve QA gezginine eşlenen bir birim başına seri numarası ile gelir.
16.5 Dahili Çapraz Referanslar ve Okuma Yolları
CoAP'tan önce çalışan Wi-Fi sağlama akışı için bkz. Reading Pen WiFi AP Mode Provisioning Smart Config. CoAP uç noktalarını duyuran LAN keşif katmanı için bkz. Reading Pen mDNS and DNS-SD Service Discovery. Bulut tarafı MQTT karşılaştırması için bkz. Reading Pen IoT MQTT vs HTTP vs CoAP ve Reading Pen IoT Bulut Mimarisi MQTT. DTLS anlaşmasını koruyan sertifika modeli için bkz. Reading Pen TLS 1.2 ve 1.3 ile Sertifika. Programın üretici tarafı için bkz. Toptan Okuma Kalemleri ve ODM Okuma Kalemi Mühendislik Hizmeti.
CTA: MDM paneliniz veya okul bölgesi LAN'ınız için özel bir CoAP kaynak ağacına mı ihtiyacınız var? Teklif isteyin mesajını "COAP-RES" kelimesiyle gönderin; 24 saat içinde 6 sayfalık bir kaynak şeması özetini (URI'ler, metotlar, blok limitleri, kimlik doğrulama) ve sabit fiyatlı bir firmware entegrasyon teklifini size ileteceğiz. Stok nötr kalemler MOQ 500 ve 5 günlük teslim süresiyle, özel CoAP şemaları ise MOQ 3.000 ve 6 haftalık firmware entegrasyon takvimiyle gönderilir.