สร้างเครือข่ายเซ็นเซอร์ไร้สาย Wi-Fi / Miwi (15.4) / Lora เพื่อตรวจสอบอุณหภูมิที่ครอบคลุมพื้นที่กว้างเช่นโรงแรมหรือโรงงาน
กรณีศึกษา: ห้องเรียนการตรวจสอบอุณหภูมิในระหว่างการประชุม Microchip Masters จัดขึ้นที่ JW Marriot Desert Ridge, AZ
ดูการสาธิต (มีชีวิตอยู่เฉพาะระหว่างการประชุม Masters เท่านั้น)
ตรวจสอบข้อมูลเซ็นเซอร์ (อุณหภูมิระดับแบตเตอรี่และ RSSI)
ครอบคลุมสถานที่ 34-35 แห่งในพื้นที่กว้างใหญ่ประมาณ 1 km2
การสื่อสารที่ปลอดภัยกับ AWS IoT สำหรับ Wi-Fi และ Miwi
เว็บอินเตอร์เฟสอิสระของอุปกรณ์เพื่อดูข้อมูลได้อย่างง่ายดาย
การบันทึกข้อมูลไปยังไฟล์ CSV
อุปกรณ์ที่ใช้แบตเตอรี่
แสดงเทคโนโลยีที่แตกต่างกันในการจัดการงานเดียวกัน
Smart Secure Connected
ที่ Masters 2018 เราตรวจสอบอุณหภูมิทั่วทั้งการประชุมโดยใช้เครือข่ายที่แตกต่างกัน 3 เครือข่ายพร้อมกันลงในแผงควบคุมเดียวที่สามารถเข้าถึงได้ง่ายที่โฮสต์ออนไลน์เพื่อดูข้อมูลของสถานที่ 34 แห่ง นอกจากนี้สำหรับการใช้งาน LORA เราได้เพิ่มโหนดสนามกอล์ฟที่วางอยู่นอกโรงแรมเพื่อแสดงความสามารถในระยะยาวของ Lora
ระบบถูกบุกรุกเป็นหลักสองส่วน:
การสาธิตและฟังก์ชั่นเดียวกันสามารถทำได้โดยใช้เทคโนโลยีใด ๆ อย่างไรก็ตามแต่ละเทคโนโลยีมีจุดแข็งและข้อเสียของตัวเอง เราให้คำอธิบายนี้และรหัสสนับสนุนเพื่อช่วยลูกค้าไมโครชิพเลือกเทคโนโลยีที่เหมาะสมกับแอปพลิเคชันของพวกเขาได้ดีที่สุด
หมายเหตุ: รหัสที่นี่มีให้ตามที่เป็นอยู่และไม่ได้ทดสอบเพื่อคุณภาพการผลิต มีปัญหาความรู้บางอย่างในส่วนคลาวด์ที่เราพูดถึงในภายหลัง คุณมีความรับผิดชอบอย่างเต็มที่ในการทดสอบและปรับรหัสในระบบของคุณเอง
ผู้ใช้ต้องการพอร์ทัลเพื่อดูข้อมูล ในการสร้างมุมมองอิสระแพลตฟอร์มที่ไม่จำเป็นต้องมีการติดตั้งหรือรหัสผ่านที่เราเลือกที่จะแสดงข้อมูลบนหน้าเว็บ HTML + JavaScript
เว็บเพจเป็นเพียงเครื่องมือที่ดึงข้อมูลจากจุดสิ้นสุดข้อมูลสามารถแทนที่ด้วยแอปพลิเคชันโทรศัพท์หรือเพิ่มลงในมุมมองผู้ใช้ในผลิตภัณฑ์ขั้นสุดท้าย
เพื่อให้แอปพลิเคชันของเราเป็นแบบแยกส่วนและเป็นอิสระจากการใช้งานส่วนหน้าไม่ว่าจะเป็นเว็บไซต์หรือแอปพลิเคชันมือถือ เราตัดสินใจที่จะใช้ API แบบพักผ่อนโดยใช้ Flask
ข้อมูลจะถูกส่งคืนเป็นวัตถุ JSON จากจุดสิ้นสุดและสามารถดูได้ที่นี่
เพื่อจุดประสงค์ของการสาธิตนี้เราใช้อินสแตนซ์เครื่องเสมือน ของ Amazon EC2 Ubuntu (เนื่องจากเราใช้ AWS IoT Core) เพื่อจัดการบริการทั้งหมดของเราทั้งหมดในอินเทอร์เฟซเดียวกัน ..
อย่างไรก็ตามสามารถทำได้เช่นเดียวกันกับ DigitalOcean เป็นทางเลือก ในแอปพลิเคชันในโลกแห่งความเป็นจริงในเชิงพาณิชย์คุณอาจมีเซิร์ฟเวอร์ของคุณเองและขั้นตอนนี้ไม่ได้เป็นเรื่องง่าย
เพื่อการสาธิตนี้เมื่อใช้ Wi-Fi หรือ 802.15.4 (Miwi) เราตัดสินใจที่จะไปกับ Amazon AWS IoT Core
เมื่อใช้ Lora & Lorawan คุณต้องลงทะเบียนและใช้หนึ่งในผู้ให้บริการ Lorawan เช่น ** The Things Network (TTN) ** หรือ Senet
เพื่อจุดประสงค์ของการสาธิตนี้เราไปกับ TTN นอกจากนี้เรายังประสบความสำเร็จในการแปลงการสาธิตนี้เป็น Senet ในอินเดีย แต่นี่อยู่นอกขอบเขตของหน้านี้
การออกแบบและเทคโนโลยีที่ใช้ในโหนดท้ายสามารถเป็นได้เช่นกัน:
เมื่อเลือกโหนดสุดท้ายผู้ใช้ต้องพิจารณา:
แต่ละจุดเหล่านี้จะกล่าวถึงในส่วนโหนดท้ายด้านล่าง
แผนภาพด้านบนสรุประบบ โหนดท้ายจะอยู่ในโหมดสลีปจนถึงเวลาที่มันตื่นขึ้นมาส่งข้อมูลไปยังเกตเวย์แล้วกลับไปที่การนอนหลับ
Lora และ Miwi ต้องการเกตเวย์เฉพาะเพื่อเชื่อมโยงจาก Lora/Miwi ไปยัง Wi-Fi ก่อนที่จะส่งข้อมูลไปยังคลาวด์ Wi-Fi มีข้อได้เปรียบที่ไม่จำเป็นต้องมีเกตเวย์เฉพาะหากมีความคุ้มครอง Wi-Fi อยู่แล้วซึ่งเป็นกรณีสำหรับสถานที่ตั้งโรงแรมของเรา
ข้อมูลจะถูกส่งไปยังผู้ให้บริการ Cloud Servicer AWS IoT สำหรับ Wi-Fi และ Miwi และ TTN สำหรับ Lora แอปพลิเคชันขวดของเราจะได้รับข้อมูลและจัดเตรียมจุดสิ้นสุดข้อมูลแบบแยกส่วนที่หน้าเว็บของเราสามารถนำเสนอได้ แอปพลิเคชัน Flask และเว็บอินเตอร์เฟสทั้งสอง colocate บนอินสแตนซ์ AWS EC2 ของเรา
จากนั้นผู้ใช้สามารถเข้าถึงเว็บเพจของเราจากอุปกรณ์ใดก็ได้ทุกที่ที่เขาต้องการ
ในส่วนนี้เราจะพูดถึงวิธีการตั้งค่าส่วนคลาวด์ของการสาธิต
เราใช้บริการสองบริการจาก AWS ในการสาธิตนี้ AWS EC2 เป็นแพลตฟอร์มโฮสติ้งเซิร์ฟเวอร์ และ AWS IoT สำหรับ Wi-Fi และ Miwi End Nodes MQTT Broker
ในการโฮสต์เซิร์ฟเวอร์ของคุณคุณจะต้องสร้างอินสแตนซ์ของเครื่องเสมือน EC2 ก่อนที่คุณจะปรับใช้ Apache ลงไป กระบวนการนี้ง่ายและตรงไปตรงมาเมื่อคุณมีบัญชี AWS ของคุณพร้อม
สำหรับคู่มือทีละขั้นตอนโปรดทำตามคู่มือ Amazon ที่นี่
สำหรับการสาธิตของเราเราไปฟรีประเภทอินสแตนซ์นี้: Ubuntu Server 16.04 LTS Free Tier (อัพเกรดเป็นปานกลางในระหว่างการประชุมเพื่อความต้องการที่สม่ำเสมอ)
ในการตั้งค่าความปลอดภัยอนุญาตให้เข้าถึงการรับส่งข้อมูลขาเข้าและขาออก HTTP, HTTPS และ SSH คุณยังสามารถปรับการตั้งค่าความปลอดภัยตามความชอบของคุณ นอกจากนี้โปรดเก็บคีย์ส่วนตัวเพื่อเข้าถึงอินสแตนซ์ที่ปลอดภัยเพื่อให้คุณสามารถผลักดันข้อมูลของคุณในนั้นและควบคุมเซิร์ฟเวอร์
ในการเข้าถึงเซิร์ฟเวอร์ของคุณให้ทำตามคำแนะนำที่มีอยู่ในเว็บไซต์ Amazon ที่นี่ ### AWS IoT Wi-Fi และ Miwi End End จะต้องเชื่อมต่อกับ AWS IoT Core เพื่อส่งข้อมูลเซ็นเซอร์ผ่าน MQTT
ในการตั้งค่า AWS IoT Cloud คุณสามารถทำตามคู่มือผู้ใช้ของโครงการ AWS Zero Touch Provisioing Kit (จากส่วนที่ 2 การติดตั้งซอฟต์แวร์ไปยังส่วนที่ 5 AWS IoT การตั้งค่าการลงทะเบียนเพียงเวลา) ผู้ใช้จำเป็นต้องสร้างฟังก์ชั่น Lambda, AWS IoT Rule
AWS Zero Touch Provisioing Kit เป็นโครงการเกี่ยวกับการจัดสรรชุดการจัดเตรียมที่ปลอดภัยเป็นศูนย์ Touch เพื่อเชื่อมต่อและสื่อสารกับบริการ IoT ของ Amazon Web Services (AWS) คู่มือผู้ใช้ของ AWS Zero Touch Provisioing Kit สามารถพบได้จากด้านล่าง: http://microchipdeveloper.com/iot:ZTPK
เมื่อคุณมีอินสแตนซ์ EC2 ของคุณและทำงานหลังจากทำตามขั้นตอนด้านบนคุณจะต้องติดตั้ง Apache และชี้ไปที่โฮสต์หน้าเว็บและแอปพลิเคชัน Flask ของเรา
อินสแตนซ์ของ EC2 มาพร้อมกับ Python แล้วตรวจสอบให้แน่ใจว่าคุณ Git Pip เพราะเราต้องการในภายหลัง $ sudo apt-get update และ sudo apt-get install python3-pip
ก่อนอื่นให้ติดตั้ง Flask บนอินสแตนซ์ EC2 ของคุณ: $ pip3 install Flask
คัดลอกไฟล์ "Server/WSN_Server.py" ไปยังอินสแตนซ์ EC2
ตอนนี้เรามาอธิบายบางส่วนของรหัสที่คุณต้องการแก้ไขและปรับให้เข้ากับแอปพลิเคชันของคุณ:
คุณจะพบพจนานุกรมชื่อ "USMastersNodeLocation" และ "IndiaMastersNodeLocation" .. เหตุผลคือเราต้องการให้บอร์ดของเราถูกนำกลับมาใช้ใหม่สำหรับตำแหน่งตัวอย่างหลายครั้งโดยไม่ต้องเปลี่ยนรหัสบนกระดานดังนั้นเรา
ตัวอย่างเช่น node4 ในระหว่างที่เราอาจารย์ใน "Desert Suite 4" จากนั้นเราก็ส่งโหนดเดียวกันไปยังอินเดียและวางไว้ในห้อง "Dominion" วิธีนี้โหนดเดียวกันด้วยรหัสเดียวกันสามารถใช้สำหรับตำแหน่งที่แตกต่างกันเพียงแค่เปลี่ยนแอปพลิเคชันขวดโดยไม่จำเป็นต้องใช้โปรแกรม Physicall อุปกรณ์
การอัปเดตรหัสทางกายภาพบนบอร์ดนั้นไม่สะดวกเสมอไปในสนาม เราขอแนะนำให้คุณนึกถึงวิธีการเช่นนี้และวางแผนล่วงหน้าเพื่อหลีกเลี่ยงการอัปเดตบอร์ด FW
#our Rooms database
USMastersNodeLocation = {
"Node1" : "Desert Suite 1" ,
"Node2" : "Desert Suite 2" ,
"Node3" : "Desert Suite 3" ,
"Node4" : "Desert Suite 4" ,
"Node5" : "Desert Suite 5" ,
"Node6" : "Desert Suite 6" ,
"Node7" : "Desert Suite 7" ,
"Node8" : "Desert Suite 8" ,
"Node9" : "Pinnacle Peak 1" ,
"Node10" : "Pinnacle Peak 2" ,
"Node11" : "Pinnacle Peak 3" ,
"Node12" : "Wildflower A" ,
"Node13" : "Wildflower B" ,
"Node14" : "Wildflower C" ,
"Node15" : "Grand Canyon 1" ,
"Node16" : "Grand Canyon 2" ,
"Node17" : "Grand Canyon 3" ,
"Node18" : "Grand Canyon 4" ,
"Node19" : "Grand Canyon 5" ,
"Node20" : "Grand Canyon 9" ,
"Node21" : "Grand Canyon 10" ,
"Node22" : "Grand Canyon 11" ,
"Node23" : "Grand Canyon 12" ,
"Node24" : "Grand Sonoran A" ,
"Node25" : "Grand Sonoran B" ,
"Node26" : "Grand Sonoran C" ,
"Node27" : "Grand Sonoran D" ,
"Node28" : "Grand Sonoran H" ,
"Node29" : "Grand Sonoran I" ,
"Node30" : "Grand Sonoran J" ,
"Node31" : "Grand Sonoran K" ,
"Node32" : "ATE / Grand Canyon 6" ,
"Node33" : "Cyber Cafe / Grand Sonoran G" ,
"Node34" : "Grand Saguaro East/West" ,
"Node35" : "Golf course"
}เราจัดเก็บข้อมูลที่เราได้รับในไฟล์ CSV ระบุตำแหน่งและชื่อไฟล์บนบรรทัด 141-143
###################################
###### Files to store data ########
###################################
wifiFile = open ( '/home/c43071/WSN/wifiData.csv' , 'a' )
miwiFile = open ( '/home/c43071/WSN/miwiData.csv' , 'a' )
loraFile = open ( '/home/c43071/WSN/loraData.csv' , 'a' )
WiFiWriter = csv . writer ( wifiFile )
MiWiWriter = csv . writer ( miwiFile )
LoRaWriter = csv . writer ( loraFile )ในการรับการแจ้งเตือนจาก End Node แอปพลิเคชันจำเป็นต้องสมัครสมาชิก AWS IoT Core และเซิร์ฟเวอร์ TTN (หรือเซิร์ฟเวอร์ใด ๆ ที่คุณเลือก)
เราใช้รหัส Pythond ที่ให้ไว้สำหรับ AWS IoT หากต้องการใช้โปรดไปที่ Amazon GitHub Repo ที่นี่
รหัสของเราสามารถใช้งานได้หากคุณแทนที่เส้นทางใบรับรองด้วยเส้นทางใบรับรองของคุณ
# For certificate based connection
myMQTTClient = AWSIoTMQTTClient ( "WSNClientID" )
# For TLS mutual authentication with TLS ALPN extension
myMQTTClient . configureEndpoint ( "a3adakhi3icyv9.iot.us-west-2.amazonaws.com" , 443 )
myMQTTClient . configureCredentials ( "/home/c43071/WSN/VeriSign.pem" , "/home/c43071/WSN/WSN_BE_private.pem" , "/home/c43071/WSN/WSN_BE_certificate.pem" )
myMQTTClient . configureOfflinePublishQueueing ( - 1 ) # Infinite offline Publish queueing
myMQTTClient . configureDrainingFrequency ( 2 ) # Draining: 2 Hz
myMQTTClient . configureConnectDisconnectTimeout ( 10 ) # 10 sec
myMQTTClient . configureMQTTOperationTimeout ( 5 ) # 5 sec
myMQTTClient . connect ()รหัสคาดว่าหัวข้อจะเป็นที่รู้จักและหนึ่งหัวข้อต่อเทคโนโลยี ผู้ใช้สามารถใช้หัวข้อต่าง ๆ ที่มีการเข้าถึงที่แตกต่างกันหากเขาต้องการ
myMQTTClient . subscribe ( "/Microchip/WSN_Demo/WiFi" , 1 , WiFiCallback )
myMQTTClient . subscribe ( "/Microchip/WSN_Demo/MiWi" , 1 , MiWiCallback ) รหัสคาดว่าวัตถุ JSON ที่มีรูปแบบ: {'nodeID': "Node1", 'Battery': "4.99V", 'Temperature': 81.46, 'RSSI': -55}
สิ่งที่เครือข่ายไม่จำเป็นต้องมีการรับรองความถูกต้องหรือใบรับรองเพื่อเชื่อมต่อเช่น AWS แต่พวกเขาพึ่งพาชื่อผู้ใช้และรหัสผ่าน ดังนั้นเราจึงแสดงกรณีการเชื่อมต่อกับเซิร์ฟเวอร์ของพวกเขาโดยใช้แพ็คเกจ "flask_mqtt"
from flask_mqtt import Mqtt
app . config [ 'MQTT_BROKER_URL' ] = 'us-west.thethings.network'
app . config [ 'MQTT_BROKER_PORT' ] = 1883
app . config [ 'MQTT_USERNAME' ] = 'jwmarriottdesertridge'
app . config [ 'MQTT_PASSWORD' ] = ''
app . config [ 'MQTT_REFRESH_TIME' ] = 1.0 # refresh time in seconds
mqtt = Mqtt ( app )
@ mqtt . on_connect ()
def handle_connect ( client , userdata , flags , rc ):
print ( "MQTT connected!!! r n " )
mqtt . subscribe ( 'jwmarriottdesertridge/devices/+/up' )
@ mqtt . on_message ()
def handle_mqtt_message ( client , userdata , message ):คุณจะสังเกตเห็นว่า Payload ข้อความสำหรับ LORA นั้นแตกต่างจาก Wi-Fi และ Miwi เล็กน้อยนี่เป็นเพราะ TTN Gateway เพิ่มข้อมูลบางอย่างไปยัง Payload ของโหนดปลายและเนื่องจากเราพยายามลดภาระการจ่ายให้มากที่สุดเท่าที่จะทำได้เพื่อลดพลังงานที่ใช้และเพิ่มประสิทธิภาพ โปรดดูส่วน LORA ด้านล่าง
### Apache
มีบทช่วยสอนและเนื้อหามากมายที่มีอยู่มากมายเราเพิ่งพูดถึงการเบี่ยงเบนที่นี่
ก่อนอื่นรับ Apache และ WSGI สำหรับ Flask: sudo apt-get install apache2 libapache2-mod-wsgi-py3
สร้างไฟล์ wsgi: vi wsn_demo.wsgi
ใส่สิ่งนี้ในไฟล์ด้านบน:
import sys
sys . path . insert ( 0 , '/var/www/html/WSN' ) สร้าง symlink เพื่อให้ไดเรกทอรีโครงการปรากฏใน/var/www/html: $ sudo ln -sT ~/WSN /var/www/html/WSN
เปิดใช้งาน WSGI: sudo a2enmod wsgi
กำหนดค่า apache (คุณจะต้อง sudo เพื่อแก้ไขไฟล์) $ sudo vi /etc/apache2/sites-enabled/000-default.conf
เราจะสร้างโฮสต์เสมือนจริง 2 รายการหนึ่งรายการสำหรับจุดสิ้นสุดข้อมูลและอีกหนึ่งเว็บไซต์สำหรับออก
บรรทัด 9 และ 49 ด้านล่างระบุชื่อเว็บไซต์ของคุณ บรรทัดที่ 14 มีตำแหน่งไฟล์ WSGI ของคุณ
วางสิ่งนี้ใน "000-efault.conf" หลังจากทำการปรับเปลี่ยนโฮสต์ของคุณตามที่กล่าวไว้ข้างต้น:
< VirtualHost *:80 >
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
ServerName demo2.microchip.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
WSGIDaemonProcess WSN threads=5
WSGIScriptAlias / /var/www/html/WSN/wsn_demo.wsgi
< Directory WSN >
WSGIProcessGroup WSN
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</ Directory >
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</ VirtualHost >
< VirtualHost *:80 >
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
ServerName demo.microchip.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/Masters
DirectoryIndex index.html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</ VirtualHost > รีสตาร์ทเซิร์ฟเวอร์: $ sudo apachectl restart
ตอนนี้คุณต้องสร้างรายการ DNS ที่จะทำแผนที่จาก "demo.microchip.com" & "demo2.microchip.com" ไปยังที่อยู่ IP สาธารณะของอินสแตนซ์ EC2
เมื่อเสร็จแล้วให้ไปข้างหน้าและดูข้อมูลของคุณในลิงค์ที่คล้ายกับ: http://demo2.microchip.com/wsn/data/lora/
และเว็บไซต์จะเป็น similr ถึง: (ขึ้นอยู่กับวิธีการกำหนดค่า apache และตำแหน่งที่คุณใส่ไฟล์ html ของคุณ): http://demo.microchip.com/wsn/masters/
เมื่อคุณตรวจสอบหน้า HTML ที่เราให้ไว้ที่ "Server US IoT Network IoT Network"
ไฟล์สำคัญของเจ้าคือ "scripts.js" ซึ่งไปและอ่านข้อมูลจากจุดสิ้นสุดข้อมูลของเราด้านบน
ส่วนที่เหลือเป็นเพียงไฟล์ HTML ที่มีไฟล์ตารางและไฟล์ SVG สำหรับแผนที่ตำแหน่ง
ในส่วนนี้เราอธิบายขั้นตอนที่จำเป็นในการเริ่มส่งข้อมูลเซ็นเซอร์ไปยังคลาวด์โดยใช้แต่ละเทคโนโลยีที่เกี่ยวข้อง
เหตุผลที่คุณอาจต้องการเลือก Wi-Fi เป็นโหนดปลายทางของคุณ:
** ข้อดีของ wifi **
เหตุผลที่ทำให้ Wi-Fi เป็นตัวเลือกที่เหมาะน้อยกว่า:
บอร์ด Wi-Fi นอนเป็นระยะเวลาหนึ่งที่สามารถกำหนดค่าได้ เมื่อตื่นขึ้นมาจะตรวจสอบเพื่อดูว่าการอ่านเซ็นเซอร์มีการเปลี่ยนแปลงตั้งแต่รายงานล่าสุดไปยังคลาวด์หรือไม่ หากเลือกที่จะอัปเดตการอ่านมันจะเชื่อมต่อกับ AP usning โมดูล Wi-Fi และรับรองความถูกต้องด้วย AWS Cloud โดยใช้ชิป Crypto-Auth (ECC508) และส่งค่าที่อัปเดต
คณะกรรมการจะต้องได้รับการกำหนดเป็นครั้งแรกก่อนที่จะสามารถใช้งานได้เราจะผ่านด้านล่างนี้
สำหรับการสาธิตเราใช้ IoT Sensor Bord ซึ่งมี MCU (SAML21) และโมดูล Microchip Wi-Fi (ATWINC1500) และเซ็นเซอร์อื่น ๆ
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ HW โปรดไปที่หน้านี้ที่นี่
บอร์ดไม่สามารถซื้อได้ในขณะนี้ @microchip Direct มันถูกแจกจ่ายให้กับผู้เข้าร่วมประชุม Masters Free และจะเพิ่มในภายหลังสำหรับตัวเลือกการซื้อ ในช่วงเวลานั้นคุณสามารถทำเช่นเดียวกันโดยใช้ AWS Zero Touch Kit
หากต้องการแฟลชเฟิร์มแวร์ไปยังบอร์ดโปรดผ่านตัวเลือกที่นี่
โปรดตรงไปที่หน้านี้เพื่อติดตั้งเครื่องมือที่จำเป็น
ตอนนี้. หากคุณต้องการใช้ Wi-Fi ขั้นตอนนั้นเป็นเช่นนี้:
ขั้นตอนแรกครอบคลุมในส่วนเมฆ นอกจากนี้คุณยังสามารถไปข้างหน้าเป็น aws.amazon.com และทำตามคำแนะนำของพวกเขาในกรณีที่พวกเขาเปลี่ยนขั้นตอน เราจะครอบคลุมขั้นตอนที่ 2 และ 3 ที่นี่
อุปกรณ์ ECC608 เป็นของการลงทุนที่ปกป้องตัวตนของอุปกรณ์ของคุณและรับรองความถูกต้องด้วยคลาวด์ AWS
ในการจัดเตรียมอุปกรณ์ ECC608 ของคุณโปรดทำตามขั้นตอนที่นี่
เมื่อคุณทำตามขั้นตอนข้างต้น ECC608 ของคุณจะได้รับการจัดเตรียมแล้ว ส่วนที่เหลือคือการจัดเก็บใบรับรองอุปกรณ์ใน WINC1500
สามารถทำได้โดยใช้โปรแกรมจากด้านแอปพลิเคชันโดยการโทร: m2m_ssl_send_certs_to_winc ด้านบนเหมาะสำหรับการผลิต อีกทางเลือกหนึ่งคือการใช้เครื่องมือในคู่มือนี้
เมื่อทั้ง ECC608 และ WINC1500 ได้รับการจัดเตรียม ในที่สุดคุณสามารถแฟลชบอร์ดด้วยแอปพลิเคชันจริง
ตัวอย่างแอปพลิเคชันในโฟลเดอร์ Wi-Fi มีรหัสอ้างอิงที่จะทำเช่นนั้น
มีโครงการที่นั่น:
คุณสามารถเปลี่ยน AP SSID และรหัสผ่านที่คุณต้องการเชื่อมต่อกับสาย 61/63 บน main.h
ชื่อโหนดอยู่ในบรรทัด 73 บน main.h
SAML21 เข้าสู่การนอนหลับและตื่นขึ้นมาในการขัดจังหวะ RTC MCU จะเข้านอนเมื่อมีการโทรไปที่: system_sleep(); และตื่นขึ้นมาเมื่อได้รับการขัดจังหวะ RTC ในการควบคุมระยะเวลาสำหรับการขัดจังหวะ RTC กำหนดค่าการนับในฟังก์ชั่น "configure_rtc_count" บน RTC.C ระยะเวลาการนอนหลับขึ้นอยู่กับความถี่ที่คุณต้องการรีเฟรชข้อมูลและงบประมาณพลังงานของคุณ
คุณต้องป้อนรหัสไคลเอนต์ MQTT ให้คล้ายกับรหัสหัวเรื่องในใบรับรองอุปกรณ์ของคุณ ป้อนรหัสไคลเอนต์ลงในตัวแปร "gawsmqttlientid" ในบรรทัด 95 ของ "winc15x0.c"
ตอนนี้ไปที่ไฟล์ Main.c อ่านฟังก์ชั่นหลักและทำความคุ้นเคยกับมันและเมื่อคุณพร้อมให้สร้างและแฟลช SAML21 ด้วยรหัส
หากคุณลงชื่อเข้าใช้การทดสอบ AWS consle ans สมัครรับหัวข้อ Wi-Fi ที่กล่าวถึงข้างต้น (/microchip/wsn_demo/wifi) คุณควรเห็นข้อความใหม่ที่ได้รับเมื่อบอร์ดทำงาน
บทนำ Lora ย่อมาจากระยะยาว Lorawan ย่อมาจากเครือข่ายพื้นที่กว้างในระยะยาว Lorawan เป็นเครือข่ายที่ Lora ทำงาน LoRawan เป็นโปรโตคอลการควบคุมการเข้าถึงสื่อ (MAC) แต่ส่วนใหญ่เป็นโปรโตคอลเลเยอร์เครือข่ายสำหรับการจัดการการสื่อสารระหว่างเกตเวย์ LPWAN และอุปกรณ์ปลายทางโหนดเป็นโปรโตคอลการกำหนดเส้นทางซึ่งดูแลโดยพันธมิตร LORA เวอร์ชัน 1.0 ของข้อกำหนดของ Lorawan แอพพลิเคชั่นบางอย่างที่สามารถทำได้โดยใช้ LORA คือการจัดการที่จอดรถอัจฉริยะและการจัดการยานพาหนะสิ่งอำนวยความสะดวกและการจัดการโครงสร้างพื้นฐานการตรวจจับและการจัดการอัคคีภัยการจัดการขยะระบบอัตโนมัติสำหรับ IoT ช่วยให้เครื่องใช้ที่ชาญฉลาดการทำฟาร์มอัจฉริยะและการจัดการปศุสัตว์
ข้อดีของ Lorawan
การสาธิตการแนะนำ อุณหภูมิของห้องพักกระจายอยู่ทั่วรีสอร์ทขนาดใหญ่ถูกตรวจสอบโดยใช้ LORA แอปพลิเคชัน LORA ทั่วไปสามารถพัฒนาได้โดยมีอุปกรณ์สิ้นสุดส่วนประกอบ 4 ชุดเกตเวย์เซิร์ฟเวอร์เครือข่ายและเซิร์ฟเวอร์แอปพลิเคชัน อุปกรณ์สิ้นสุดด้วยเซ็นเซอร์อุณหภูมิ (ทำงานบนแบตเตอรี่) ถูกใช้เพื่อแสดงให้เห็นถึงข้อดีของ Lorawan เช่นพลังงานต่ำปลอดภัยและระยะยาว
ฮาร์ดแวร์
ซอฟต์แวร์
ขั้นตอนทีละขั้นตอนเพื่อทำซ้ำการสาธิต
ค้นหาไฟล์ variant.cpp ของคุณในแพ็คเกจบอร์ดโซดาภายในการติดตั้ง Arduino ไฟล์ variant.cpp ของฉันอยู่ในไดเรกทอรีนี้ c: users cxxxx appdata local arduino15 packages sodaq hardware samd 1.6.18 variants sodaq_explorer ขึ้นอยู่กับการติดตั้งและเวอร์ชัน Arduino ของคุณอาจแตกต่างกันเล็กน้อย
เปิดไฟล์ variant.cpp พร้อมตัวแก้ไขใด ๆ และทำการเพิ่มเติมต่อไปนี้: ค้นหาในไฟล์ตารางที่มีชื่อนี้: const pindescription g_apindescription [] = หลังจากบรรทัดสุดท้ายในตารางเพิ่มสิ่งต่อไปนี้: // 48 vbat {portb, 5, pio_analog, pin_attr_analog, adc_channel13 }, // VBAT เมื่อผู้ใช้ทำการเปลี่ยนแปลงไฟล์จุดสิ้นสุดของตารางควรมีลักษณะเช่นนี้: // 47 ปุ่ม {Porta, 14, PIO_OUTPUT, PIN_ATTR_DIGITAL, NO_ADC_CHANNEL, NOT_ON_PWM, NOT_ON_TIMER pin_attr_analog, adc_channel13, not_on_pwm, not_on_timer, external_int_none}, // vbat
จากนั้นผู้ใช้สามารถเพิ่มบรรทัดต่อไปนี้ #Define VBAT_MEASURE (48U) ลงในตัวแปรไฟล์. h ที่เส้นทางเดียวกันกับ variant.cpp หรือหรือผู้ใช้อาจเพิ่ม #define vbat_measure 48 ในร่างหลัก จากนั้นบันทึกไฟล์
จากนั้นผู้ใช้สามารถอ่านแรงดันแบตเตอรี่ (MV) ด้วยรหัสนี้:
'#define ADC_AREF 3.3f'
'#define BATVOLT_R1 4.7f'
'#define BATVOLT_R2 10.0f'
'#define VBAT_MEASURE 48'
pinMode(VBAT_MEASURE, INPUT);
uint16_t getBatteryVoltage()
{
pinMode(VBAT_MEASURE, INPUT);
uint16_t voltage = (uint16_t)((ADC_AREF / 1.023) * (BATVOLT_R1 + BATVOLT_R2) / BATVOLT_R2 * (float)analogRead(VBAT_MEASURE));
return(voltage);
}
เคล็ดลับ: หากแรงดันไฟฟ้าที่รายงานปิดอยู่เล็กน้อยหรือตัวแปร/เสียงดังผู้ใช้สามารถทำค่าเฉลี่ยของการอ่าน ADC
การลงทะเบียนเกตเวย์และการจัดสรรอุปกรณ์ปลายทางจะช่วยให้ผู้ใช้สามารถสร้างบัญชีเซิร์ฟเวอร์เครือข่ายลงทะเบียนเกตเวย์และอุปกรณ์สิ้นสุด หลังจากสร้าง/ลงทะเบียนสำหรับบัญชีให้เชื่อมต่อเกตเวย์ของคุณกับเซิร์ฟเวอร์เครือข่ายสิ่งต่าง ๆ ทำตามขั้นตอนในลิงค์ต่อไปนี้สำหรับการลงทะเบียนเกตเวย์
เมื่อเกตเวย์ออนไลน์ "สร้างแอปพลิเคชัน" ตามด้วย "สร้างอุปกรณ์ใหม่" สำหรับการลงทะเบียนแอปพลิเคชันและอุปกรณ์สิ้นสุดไปยัง TTN เมื่อสร้างแอปพลิเคชันและอุปกรณ์สิ้นสุดใน TTN ต่อไปนี้เป็นสิ่งที่ต้องดูแลในขณะที่สร้าง EUI และปุ่มใน TTN สำหรับแอปพลิเคชันนี้ เลือกที่จะสร้างแอพใด ๆ EUI และ Dev EUI โดยอัตโนมัติ คีย์แอพ (16 ไบต์) ควรเป็น appkeyprefix + dev eui ซึ่งเป็นส่วนหนึ่งของซอร์สโค้ดในโครงการ JW_MARIT_DESERT_RIDGE PROJ หมายเหตุ: คีย์แอพสามารถเป็นตัวเลือกของผู้ใช้ได้ Demo ใช้วิธีการ Cancatenation สำหรับการรับคีย์แอพและไม่จำเป็นสำหรับนักพัฒนาแอพในการใช้วิธีนี้ โดยค่าเริ่มต้น appkeyprefix คือ {0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99, 0x88}; dev eui สามารถแก้ไขได้ตามที่เน้นในรูป
เมื่ออุปกรณ์สิ้นสุดถูกสร้างขึ้นในสิ่งที่คอนโซลเครือข่ายและการเปลี่ยนแปลงรหัสที่จำเป็นได้เกิดขึ้นในซอร์สโค้ดแอปพลิเคชันสำหรับ Deveui และ Appeui เราจะใช้วิธีการเข้าร่วม OTAA สำหรับแอปพลิเคชันของเรา
ก่อนที่จะเขียนโปรแกรมซอร์สโค้ดไปยัง SAMD21 บนบอร์ดโซดาให้ตรวจสอบให้แน่ใจว่าได้รับการติดตั้งเวอร์ชัน 1.6.11 สำหรับการรองรับแพ็คเกจบอร์ดสำหรับบอร์ดโซดา Xplorer
ตั้งโปรแกรมชุดโซดา Xplorer โดยใช้โหมด bootloader กดรีเซ็ตสองครั้งในการสืบทอดอย่างรวดเร็วและตั้งโปรแกรม Sodaq Xplorer Kit โดยใช้ Arduino TTN มีคุณสมบัติที่เรียกว่าฟังก์ชั่น TTN ซึ่งช่วยให้ผู้ใช้เปลี่ยนไบต์ส่งผ่านเครือข่ายสิ่งต่าง ๆ ไปยังเขตข้อมูลที่มนุษย์อ่านได้ หากต้องการเพิ่ม API สำหรับการสาธิตนี้ให้ไปที่แอปพลิเคชัน? xxxx? รูปแบบเพย์โหลด xxxx หมายถึงชื่อแอปพลิเคชันของคุณที่เลือก
ไปที่ส่วนถอดรหัสและบันทึกฟังก์ชันตัวถอดรหัสด้านล่าง
function Decoder(bytes, port) {
var length = bytes.length;
if(length == 6){
var temperature = (bytes[0] <<8) | bytes[1];
var battery = (bytes[2] <<8) | bytes[3];
battery = battery/100 + "V";
var time = bytes[4] + ":" + ('0' + bytes[5].toString(10)).slice(-2);
return{
"temperature": temperature /100,
"battery": battery /// 100, // this operation now is done in earlier step
"time": time
};
}else
{
var result = "";
for (var i = 0; i < length; i++) {
result += String.fromCharCode(parseInt(bytes[i]));
}
return {
"msg": result,
};
}
}
หลังจากกำหนดค่าตัวถอดรหัสและการเขียนโปรแกรมบอร์ดด้วยซอร์สโค้ดแอปพลิเคชัน ข้อมูลแอพควรเริ่มปรากฏขึ้น
บทนำ Miwi ย่อมาจาก Microchip Wireless Miwi เป็นโปรโตคอลไร้สายที่เป็นกรรมสิทธิ์ที่ออกแบบโดยเทคโนโลยีไมโครชิปที่ใช้วิทยุดิจิตอลขนาดเล็กที่มีกำลังต่ำตามมาตรฐาน IEEE 802.15.4 สำหรับเครือข่ายพื้นที่ส่วนบุคคลไร้สาย (WPANs) มันถูกออกแบบมาสำหรับอัตราการส่งข้อมูลต่ำและระยะทางสั้น ๆ เครือข่ายที่ จำกัด ต้นทุนเช่นการตรวจสอบและควบคุมอุตสาหกรรมการควบคุมบ้านและอาคารอัตโนมัติการควบคุมระยะไกลเซ็นเซอร์ไร้สายพลังงานต่ำการควบคุมแสงและการอ่านมิเตอร์อัตโนมัติ โปรโตคอล Miwi รองรับทอพอโลยีเครือข่ายสามตัว
ข้อดีของ Miwi
การสาธิตการแนะนำ อุณหภูมิของห้องพักกระจายอยู่ทั่วรีสอร์ทขนาดใหญ่ถูกตรวจสอบโดยใช้ทอพอโลยีเครือข่าย Miwi Star
แอปพลิเคชัน Miwi ทั่วไปสามารถพัฒนาได้โดยมี 2 องค์ประกอบ ผู้ประสานงาน PAN และอุปกรณ์สิ้นสุด อุปกรณ์สิ้นสุดสามารถพิมพ์ FFD/RFD ได้ อุปกรณ์ RFD End ถูกนำมาใช้เพื่อจุดประสงค์ของการสาธิตนี้เนื่องจากความสามารถในการเข้านอน อุปกรณ์ปลาย
ฮาร์ดแวร์
ซอฟต์แวร์
ข้อมูลทั่วไป AWS IoT คืออะไร? AWS IoT เป็นแพลตฟอร์มคลาวด์ที่ได้รับการจัดการซึ่งช่วยให้อุปกรณ์ที่เชื่อมต่อได้อย่างง่ายดายและโต้ตอบกับแอปพลิเคชันคลาวด์และอุปกรณ์อื่น ๆ ได้อย่างปลอดภัย AWS Lambda คืออะไร? AWS Lambda เป็นบริการคอมพิวเตอร์ที่เรียกใช้รหัสเพื่อตอบสนองต่อเหตุการณ์และจัดการทรัพยากรการคำนวณโดยอัตโนมัติตามรหัสนั้น การลงทะเบียนอุปกรณ์:“ JITR” เกิดขึ้นหนึ่งครั้งในช่วงเริ่มต้นสำหรับฟังก์ ชั่น Lambda Lambda ฟังก์ชั่น Lambda ใหม่แต่ละตัวเป็นวิธีการสร้างสิ่งที่เป็นไปโดยอัตโนมัติ ฟังก์ชั่นแลมบ์ดาจะทริกเกอร์เมื่ออุปกรณ์ที่ไม่รู้จักกับ CA ที่รู้จักกันเชื่อมต่อสรุปของฟังก์ชั่น Lambda จะจัดการ
ขั้นตอนทีละขั้นตอนเพื่อจำลองการสาธิต Miwi
สร้างบัญชี AWS
การตั้งค่าแลมบ์ดาสำหรับการตั้งค่าแลมบ์ดาทำตามขั้นตอนที่กล่าวถึงในส่วน“ v. aws iotjust-in-time setup ลิงค์”
สร้างระบบนิเวศใบรับรองเพื่อจุดประสงค์ของการสาธิตนี้เราสร้างห่วงโซ่ความน่าเชื่อถือของเราเองเรียกใช้สคริปต์ที่นี่เพื่อ:
ใบรับรองต่อไปนี้จะถูกสร้าง root-ca.crt/key signer-ca.crt/key
ลงทะเบียน CA ของเราด้วย AWS IoT ในใบรับรอง CA ขั้นตอนสุดท้ายถูกสร้างขึ้น AWS ต้องการให้ผู้ใช้ต้องลงทะเบียนและเปิดใช้งานเพื่อให้สามารถเรียกใช้ฟังก์ชันแลมบ์ดาเมื่ออุปกรณ์ที่ใช้ CA เชื่อมต่อกับมัน ส่วนหนึ่งของการลงทะเบียนกำหนดให้ผู้ใช้พิสูจน์ได้ว่าผู้ใช้มีคีย์ส่วนตัวไปยังแคลิฟอร์เนีย ขั้นตอนสำหรับการลงทะเบียน
เพื่อให้ขั้นตอนสำหรับผู้ใช้ลงทะเบียนต้องทำ - กำหนดค่าข้อมูลรับรอง AWS CLI เปิดคำสั่งพร้อมคำสั่งไปยัง“ C: Program Files Amazon awscli” ประเภท“ AwSconfigure” ป้อนข้อมูลจากไฟล์บัญชีผู้ใช้
บทบัญญัติ ECC608 เพื่อจัดหาผู้ใช้ ECC608 ต้องการ:
สร้างคู่คีย์อุปกรณ์สาธารณะ/ส่วนตัวและสร้าง CSR สำหรับใบรับรองอุปกรณ์
เปิดโซลูชัน SAMR30 XPRO ECC บน Atmel Studio 7, เชื่อมต่อบอร์ด EDBG USB ATWINC1500-XPRO บน EXT1 และ ATCRYPTOAUTH-B XPRO Board บน EXT3 ของ ATSAMR30-XPRO TERATERM และตั้งค่าโปรแกรมการตั้งค่า ATSAMR30-XPRO
สร้างใบรับรองอุปกรณ์ เพื่อสร้างใบรับรองอุปกรณ์ WINC:
จัดเก็บข้อมูลใบรับรองลงใน WINC1500 เพื่อจัดเก็บข้อมูลใบรับรองใน WINC1500
เชื่อมต่อกับ AWS iotcloud และเผยแพร่ไปยังชื่อสิ่ง