လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Php ၏ Pack function ကိုအသုံးပြုနည်း IOT Devices ကူးစက်ရန်အတွက် GPS ကိုသွဒီနင်နှင့် timestamp အချက်အလက်များကို GPS ကိုသွဒီနင်စောင်းနှင့် timestamp အချက်အလက်များကိုတပ်ဆင်ရန်?

Php ၏ Pack function ကိုအသုံးပြုနည်း IOT Devices ကူးစက်ရန်အတွက် GPS ကိုသွဒီနင်နှင့် timestamp အချက်အလက်များကို GPS ကိုသွဒီနင်စောင်းနှင့် timestamp အချက်အလက်များကိုတပ်ဆင်ရန်?

M66 2025-06-26

1 ။ ဘာကြောင့် binary ထုပ်ပိုးမှုကိုသုံးတာလဲ။

များသောအားဖြင့် GPS ကိုသွဒီနိတ်များသည် floating point နံပါတ်များတွင်ကိုယ်စားပြုသည်။

  • လတ်တီတွဒ်: 31.2304

  • လောင်ဂျီတွဒ်: 121.4737

  • Timestamp: ဥပမာအားဖြင့်, Unix Timestamp 1716720000

JSOS ကဲ့သို့သော string ပုံစံဖြင့်တိုက်ရိုက်ပေးပို့ပါကအရွယ်အစားကြီးမားသည်နှင့် bandwidth နှင့်အတူ iot devices များအတွက်မသင့်တော်ပါ။ Pack () function ကို အသုံးပြု. ကျွန်ုပ်တို့သည်ဤတန်ဖိုးများကို fixed-length data packet တစ်ခုထဲသို့ binary format ဖြင့်ထည့်သွင်းနိုင်ပြီး bandwidth ကိုသိမ်းဆည်းခြင်းနှင့်လက်ခံခြင်းကိုတိကျစွာပြန်ယူနိုင်သည်။


2 ။ PHP Pack () function ကိုမိတ်ဆက်ပါ

POP () POP () PHP တွင် built-in function တစ်ခုဖြစ်ပြီးအချက်အလက်များကို binary strings များသို့ပြောင်းလဲရန်, ကွန်ယက်ဆက်သွယ်ရေး, ဖိုင်သိုလှောင်မှုစသည်ဖြင့်အသုံးပြုသည်။ အခြေခံ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -

 string pack(string $format, mixed ...$values)

Parameter $ format သည် format control string တစ်ခုဖြစ်သည်။ ဥပမာ, နောက်ဆက်တွဲတန်ဖိုးများ၏အမျိုးအစားနှင့်အမိန့်ကိုသတ်မှတ်သည့်အမျိုးအစားနှင့်အမှာစာများကိုသတ်မှတ်သည့်ပုံစံဖြစ်သည်။

  • F : 32-bit floating point နံပါတ် (Little endian)

  • D : 64-bit floating အမှတ်နံပါတ်

  • N : 32-bit unsigned integer (Big Endian)

  • v : 32-bit unsigned integer (Little endian)


3 ။ Package GPS ကိုသွဒီနိတ်များနှင့် timestamps များ

လိုက်ဖက်တဲ့နှင့်ဒေတာကျစ်လစ်သိပ်သည်းမှုအတွက်ကျွန်ုပ်တို့အသုံးပြုသည်ဟုယူဆပါ -

  • လတ်တီတွဒ်: float (bytes 4 bytes, littledian)

  • လောင်ဂျီတွဒ်: float (4 bytes, အသေးစား endian)

  • Timestamp: Uint32 (4 bytes, little endian)

ဤအချက်အလက်များကို package လုပ်ရန်အောက်ပါကုဒ်ကိုသုံးနိုင်သည်။

 <?php
// GPSအချက်များ
$latitude = 31.2304;
$longitude = 121.4737;
$timestamp = time(); // လက်ရှိ timestamp

// အသေးစား - endian format ကိုသုံးပြီးထုပ်ပိုး(latitude: float, longitude: float, timestamp: uint32)
$binaryData = pack('ffV', $latitude, $longitude, $timestamp);

// မလုပ်မနေရမဟုတ်သော:将打包后的二进制အချက်များ进行Hexကုဒ်,ကြည့်ရှုရန်လွယ်ကူသည်
$hexData = bin2hex($binaryData);

echo "打包后的二进制အချက်များ为: $hexData\n";
?>

ဤကုဒ်သည်အောက်ပါတို့ကိုထုတ်ပေးလိမ့်မည်။

 打包后的二进制အချက်များ为: 9ad4fc3f7089514270128c66

အပိုင်းတစ်ခုစီသည်ထုပ်ပိုးသောလတ်တီတွဒ်, လောင်ဂျီတွဒ်နှင့်အချိန်တံဆိပ်ခေါင်းများနှင့်သက်ဆိုင်သည်။ ဆာဗာကိုပြန်ခွဲရန်သင် ဖြည့်တင်း () ကို သုံးနိုင်သည်။

 <?php
$receivedData = $binaryData; // ဒါကြောင့် device ကိုကနေလက်ခံရရှိခဲ့သည်ယူဆ
$unpacked = unpack('flatitude/flongitude/Vtimestamp', $receivedData);

print_r($unpacked);
?>

4 ။ ပစ္စည်းကိရိယာပို့ဆောင်ရေးအကြံပြုချက်များ

Device သည် Binary strough ကို သုံး. MQTT, HTTP Post သို့မဟုတ် UDP မှတဆင့်ဆာဗာသို့တင်ရန်တူညီသော binary structure ကိုသုံးနိုင်သည်။ ဥပမာအားဖြင့်:

 $url = "https://m66.net/api/receive.php";
$data = $binaryData;

$options = [
    'http' => [
        'method' => "POST",
        'header' => "Content-Type: application/octet-stream\r\n",
        'content' => $data
    ]
];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);

echo "ဆာဗာတုံ့ပြန်မှု: $response\n";

ဆာဗာသည်မူလ binary data ကို PHP: // input မှတစ်ဆင့်ဖတ်နိုင်ပြီး၎င်းကိုခွဲခြမ်းစိတ်ဖြာနိုင်သည်။


5 ။ မှတ်စုဖို့အရာ

  • Pack တွင် floating point နံပါတ် () floating point note format သည်မတူညီသောပလက်ဖောင်းများနှင့်အနည်းငယ်ကွဲပြားနိုင်သည်။

  • ကိရိယာနှင့်ဆာဗာသည်တူညီသော byte အမိန့်ကိုအသုံးပြုပါ။

  • ကူးစက်သောဒေတာဖွဲ့စည်းပုံသည်ရှုပ်ထွေးပြီးပါကဒေတာ header identifier ကိုထည့်သွင်းရန်အကြံပြုသည် (ဥပမာ, ဗားရှင်းနံပါတ်စသည်) ။