9.6 KiB
ភ្ជាប់ឧបករណ៍ IoT របស់អ្នកទៅមេឃ្ - សម្ភារៈ IoT Virtual និង Raspberry Pi
ក្នុងផ្នែកនេះនៃមេរៀន អ្នកនឹងភ្ជាប់ឧបករណ៍ IoT ឌីជីថលរបស់អ្នក ឬ Raspberry Pi ទៅឲ្យ IoT Hub របស់អ្នក ដើម្បីផ្ញើព័ត៌មាន telemetry និងទទួលការបញ្ជា។
ភ្ជាប់ឧបករណ៍របស់អ្នកទៅ IoT Hub
ជំហានបន្ទាប់គឺភ្ជាប់ឧបករណ៍របស់អ្នកទៅ IoT Hub។
ភារកិច្ច - ភ្ជាប់ទៅ IoT Hub
-
បើកថត
soil-moisture-sensorនៅក្នុង VS Code។ ពិនិត្យឲ្យប្រាកដថាបរិនៅវេតិកនៅក្នុងterminal កំពុងដំណើរការបើអ្នកកំពុងប្រើឧបករណ៍ IoT វិចិត្រស័ព្ទ។ -
ដំឡើងបណ្ណាល័យ Pip ផ្សេងទៀត៖
pip3 install azure-iot-deviceazure-iot-deviceគឺជាបណ្ណាល័យសម្រាប់ទំនាក់ទំនងជាមួយ IoT Hub របស់អ្នក។ -
បញ្ចូលការនាំចូលខាងក្រោមទៅកាន់ខាងលើនៃឯកសារ
app.pyខាងក្រោមការនាំចូលដែលមានរួចហើយ៖from azure.iot.device import IoTHubDeviceClient, Message, MethodResponseកូដនេះនាំចូល SDK សម្រាប់ទំនាក់ទំនងជាមួយ IoT Hub របស់អ្នក។
-
ដកស្រាយជួរដេក
import paho.mqtt.client as mqttដោយសារតែបណ្ណាល័យនេះមិនត្រូវការ់ទៀតទេ។ ដកស្រាយកូដ MQTT ទាំងអស់ រួមមានឈ្មោះក្បាលមាតិកា ទាំងអស់នៃកូដដែលប្រើប្រាស់mqtt_clientនិងhandle_command។ ទុកឲ្យមានតែវគ្គលូបwhile True:ប៉ុណ្ណោះ ដកបន្ទាត់mqtt_client.publishចេញពីវគ្គនេះ។ -
បន្ថែមកូដខាងក្រោមក្រោមបន្ទាត់នាំចូល៖
connection_string = "<connection string>"ជំនួស
<connection string>ជាមួយខ្សែសន្ទស្សន៏ដែលអ្នកបានទទួលសម្រាប់ឧបករណ៍នៅមុននេះក្នុងមេរៀន។💁 នេះមិនមែនជាប្រព័ន្ធល្អបំផុតទេ។ ខ្សែសន្ទស្សន៏គួរមិនត្រូវបានរក្សាទុកក្នុងកូដប្រភព ពីព្រោះវាអាចត្រូវបានត្រួតមើលដោយអ្នកណាមួយបាន។ យើងធ្វើបែបនេះដើម្បីស្រួល សូមប្រើអារម្មណ៍បរិស្ថានឬឧបករណ៍ដូចជា
python-dotenv។ អ្នកនឹងរៀនបន្ថែមអំពីវានៅក្នុងមេរៀនក្រោយ។ -
ខាងក្រោមកូដនេះ បន្ថែមខាងក្រោមដើម្បីបង្កើតវត្ថុ device client ដែលអាចទំនាក់ទំនងជាមួយ IoT Hub ហើយភ្ជាប់វា៖
device_client = IoTHubDeviceClient.create_from_connection_string(connection_string) print('Connecting') device_client.connect() print('Connected') -
រត់កូដនេះ។ អ្នកនឹងឃើញឧបករណ៍របស់អ្នកភ្ជាប់បាន។
pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py Connecting Connected Soil moisture: 379
ផ្ញើ telemetry
ឥឡូវនេះឧបករណ៍របស់អ្នកបានភ្ជាប់ហើយ អ្នកអាចផ្ញើ telemetry ទៅ IoT Hub ជំនួសឲ្យ MQTT broker។
ភារកិច្ច - ផ្ញើ telemetry
-
បន្ថែមកូដខាងក្រោមនៅក្នុងវគ្គ
while Trueមុនពេលរាត្រីងliegen:message = Message(json.dumps({ 'soil_moisture': soil_moisture })) device_client.send_message(message)កូដនេះបង្កើតសារ IoT Hub
Messageដែលមានការអានសំណើមខ្សោយដីជា string JSON ហើយបញ្ជូនវាទៅ IoT Hub ជាសារឧបករណ៍ទៅមេឃ្។
គ្រប់គ្រងបញ្ជា
ឧបករណ៍របស់អ្នកត្រូវការគ្រប់គ្រងបញ្ជាជាប់ពីកូដម៉ាស៊ីនមេសម្រាប់គ្រប់គ្រង relay។ នេះត្រូវបានផ្ញើជារបទបញ្ជាត្រឡប់ដោយបន្ទាត់។
ភារកិច្ច - គ្រប់គ្រងបញ្ជាត្រឡប់ដោយបន្ទាត់
-
បន្ថែមកូដខាងក្រោមមុនវគ្គ
while True៖def handle_method_request(request): print("Direct method received - ", request.name) if request.name == "relay_on": relay.on() elif request.name == "relay_off": relay.off()នេះកំណត់កិច្ចការមួយ
handle_method_requestដែលនឹងត្រូវហៅពេលដែលមានការraw direct method ត្រូវបានហៅដោយ IoT Hub។ direct method នីមួយៗមានឈ្មោះ ហើយកូដនេះរំពឹងថាមាន method ខាងក្រោមrelay_onដើម្បីបើក relay និងrelay_offដើម្បីបិទ relay។💁 វាក៏អាចអនុវត្តក្នុង direct method តែមួយបានផង ដោយផ្ញើស្ថានភាពដែលចង់បានរបស់ relay ក្នុង payload ដែលអាចផ្ញើជាមួយការស្នើសុំ method ហើយអាចទទួលបានពីវត្ថុ
request។ -
direct methods ត្រូវការឆ្លើយតប ឲ្យអោយកូដហៅដឹងថាត្រូវបានដំណើរការហើយ។ បន្ថែមកូដខាងក្រោមនៅចុង
handle_method_requestដើម្បីបង្កើតការឆ្លើយតបសម្រាប់ស្នើសុំ៖method_response = MethodResponse.create_from_method_request(request, 200) device_client.send_method_response(method_response)កូដនេះផ្ញើការឆ្លើយតបទៅសំណើ direct method ជាមួយកូដ HTTP 200 ហើយផ្ញើវាលើវិញទៅ IoT Hub។
-
បន្ថែមកូដខាងក្រោមក្រោមកំណត់មុខងារនេះ៖
device_client.on_method_request_received = handle_method_requestកូដនេះប្រាប់ឲ្យ IoT Hub client ហៅមុខងារ
handle_method_requestនៅពេលដែល direct method ត្រូវបានហៅ។
💁 អ្នកអាចស្វែងរកកូដនេះនៅក្នុងថត code/pi ឬ code/virtual-device។
😀 ព្រីក្រោមសំណើមខ្សោយដីរបស់អ្នកបានភ្ជាប់ទៅ IoT Hub របស់អ្នកហើយ!
ការបដិសេធ៖
ឯកសារនេះត្រូវបានបកប្រែដោយប្រើសេវាកម្មបកប្រែ AI Co-op Translator។ ខណៈពេលដែលយើងខិតខំសំរាប់ភាពជាប់ចិត្ត ក៏សូមយល់ដឹងថាការបកប្រែដោយស្វ័យប្រវត្តិនោះអាចមានកំហុស ឬការមិនត្រឹមត្រូវ។ ឯកសារដើមនៅភាសាតិចត្រូវបានគេចាត់ទុកជាផ្លូវការជាចម្បង។ សំរាប់ព័ត៌មានសំខាន់ហើយការបកប្រែដោយមនុស្សវិជ្ជាជីវៈគួរត្រូវបានផ្តល់អាទិភាព។ យើងមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំ ឬការបកស្រាយខុសដែលកើតមានពីការប្រើប្រាស់ការបកប្រែនេះឡើយ។