نمایش داده های سریال در صفحه وب – با استفاده از اسکریپت های PHP یا Python

مارس 10, 2020 by بدون دیدگاه

گاه ممکن است تجسم یک جریان مداوم از داده های حاصل از اتصال سریال به عنوان یک صفحه وب در یک مرورگر مفید باشد. اما چگونه می توانید پیش بروید؟ ممکن است کمی از برنامه نویسی را پیشنهاد کنیم؟

گاه ممکن است تجسم جریان مداوم از داده های حاصل از اتصال سریال به عنوان یک صفحه وب در یک مرورگر مفید باشد. اما چگونه می توانید پیش بروید؟ آیا می توانیم کمی از اسکریپت را پیشنهاد کنیم؟

اساساً ، این مشکل به دلیل ایجاد دوره ای یک صفحه وب شامل آخرین داده های سریال ، کم می شود. سپس یک مرورگر وب می تواند صفحه را ، بر روی همان رایانه یا از طریق شبکه ، نمایش دهد. بنابراین ، آنچه لازم است یک برنامه کوچک است که به طور مداوم داده های سریال را به عنوان مثال به پرونده های HTML یا PHP تبدیل می کند. آها! آیا PHP یک زبان برنامه نویسی برای برنامه های مرتبط با اینترنت نیست؟ بله ، همینطور است بنابراین ، آیا می توانیم از PHP برای انجام کار استفاده کنیم؟ بله ما میتوانیم. اما راه های دیگری نیز وجود دارد ، همانطور که خواهیم دید.

از تازه کردن صفحه خودکار استفاده کنید

همه اینها با یادآوری این آغاز می شود که HTML به استفاده از یک برچسب متا می دهد که به مرورگر دستور می دهد بارگیری مجدد صفحه را به صورت دوره ای انجام دهد:

این برچسب به مرورگر می گوید صفحه حاوی برچسب را هر ده ثانیه بارگیری مجدد کند. (در صورتی که مرورگر شما از این برچسب پشتیبانی نمی کند ، می توان آن را با یک تکه جاوا اسکریپت جایگزین کرد. بارگیری رایگان در زیر این مقاله را ببینید .) اگر ما یک صفحه وب ایجاد کنیم که شامل این برچسب باشد و به مرورگر اشاره کنیم. در صورت بارگیری مجدد صفحه ، آن را هر ده ثانیه انجام می دهد (البته زمان می تواند یک مقدار دیگر باشد). اگر صفحه را هر ده ثانیه یک بار بازنویسی کنیم و داده های سریال تازه را در آن قرار دهیم ، مرورگر آن را نیز نشان می دهد.

تقسیم کار در دو

همچنین می توان به جای یک فایل HTML برچسب تازه کردن را در یک فایل PHP قرار داد و مرورگر نیز همین کار را انجام داد. سپس پرونده PHP می تواند یک اسکریپت برای خواندن داده ها از درگاه سریال داشته باشد. این جایی است که مسائل پیچیده می شوند زیرا PHP بطور طبیعی از پورت های سریال پشتیبانی نمی کند. و حتی اگر این کار را انجام دهد ، به این معنی است که هر بار مرورگر صفحه (آخرین نسخه صفحه) را درخواست می کند ، اسکریپت باید پورت سریال را باز کند ، برخی داده ها را بدست آورد و دوباره درگاه را ببندد. داده دریافت شده در خارج از این پنجره از بین رفته است. علاوه بر این ، ممکن است برخی از سیستم های مانند آردوینو با باز شدن پورت سریال مجدداً تنظیم مجدد شوند و این تنظیم را بی فایده کند. راه حل برای این کار تقسیم فرایند در دو زیر پردازش است:
[bullet list]
– فرآیند 1: یک اسکریپت برای خواندن مداوم درگاه سریال و بروزرسانی پرونده ای که توسط صفحه وب PHP وارد شده است ، به فهرست 1. مراجعه کنید. [19659006لیست1:یکاسکریپتPHPکهدادههاراازدرگاهسریالمیخواندوآنرابهپروندهایبنام"datatxt"مینویسد

// لینوکس $ comPort = "/ dev / ttyACM0"؛
$ comPort = "COM15"؛

شامل "php_serial.class2.php"؛
$ serial = phpSerial جدید؛
$ serial-> deviceSet ($ comPort)؛

// در ویندوز (فقط 10؟) همه تنظیمات حالت باید با یک بار انجام شوند.
cmd = "حالت". $ comPort. "baud = 115200 parity = n data = 8 stop = 1 to = off xon = off"؛
$ سریال -> _ اجرا (cmdd) ؛
$ serial-> deviceOpen ()؛

پژواک "منتظر داده ها … n"؛
خواب (2)؛ // صبر کنید تا آردوینو کار خود را به پایان برساند.
$ serial-> serialflush ()؛

در حالی که (1)
{
$ read = $ serial-> readPort ()؛

if (strlen ($ بخوانید)! = 0)
{
$ fp = fopen ("data.txt" ، "w") ؛
if ($ fp! = false)
{
fwrite ($ fp ، برش ($ خوانده شده)) ؛
fclose ($ fp) ؛
}
}
}

؟>

– فرآیند 2: مرورگری که بطور دوره ای صفحه وب PHP را بارگیری مجدد می کند تا بتواند داده ها را تازه کند ، به لیست 2 و شکل 1 مراجعه کنید.

شکل 1: پرونده PHP پویا تولید شده توسط PHP
اسکریپت توسط یک سرور وب WAMP به مرورگر ما ارائه می شود
(نوار آدرس آن را ببینید). این جدا شده از کاما
مقادیر خوانده شده از داده های پورت سریال در یک جدول اساسی.
مقادیر زیر 500 به رنگ قرمز چاپ می شود ، سایر رنگ ها سبز هستند.
عنوان پنجره Command Prompt
را نشان می دهد
دستور برای اجرای اسکریپت.

لیست 2: این صفحه وب PHP محتویات پرونده ای به نام "data.txt" را به صورت جدول فرمت می کند.

$ page_title = "Arduino on PHP"؛

// شروع صفحه HTML.
پژواک ""؛
echo ""؛ // صفحه شروع می شود.
echo "" ، $ page_title ، ""؛ // سر شروع می شود.
پژواک "
پژواک "
پژواک "
پژواک "
پژواک "
echo ""؛ // انتهای سر.
echo "

"؛ // بدن شروع می شود.

echo "

"، $ page_title، "

"؛ // عنوان صفحه.

// ایجاد جدول از پرونده داده.
$ handle = fopen ("data.txt" ، "r")؛
اگر ($ دسته! = NULL)
{
// یک خط از پرونده را بخوانید ، سپس آن را ببندید.
$ data = fget (دسته $) ؛
fclose (دسته $) ؛

// همگام سازی با داده ها.
if (داده $ [0] == '$')
{
// فضای سفید را حذف کنید.
str_replace (''، ''، داده $)؛
// تقسیم داده ها در زمینه های جدا شده توسط "،".
// قالب پیش بینی شده: "$، id1، مقدار1، id2، مقدار2، CRLF"
لیست (startchar $ ، $ id1 ، $ 1 $ ، $ id2 ، $ value2 ، $ newline) = منفجر شود ("،" ، داده $) ؛
// آرایه ای را از لیست ایجاد کنید.
$ number = array ($ id1 => $ value1، $ id2 => $ value2)؛
// مرتب سازی آرایه به ترتیب صعودی کلید.
ksort (عدد $) ؛

// جدول شروع می شود.
پژواک "


echo "


foreach (اعداد به عنوان $ x => $ x_value)
{
echo "

"؛ // سطر جدول شروع می شود.
echo "

"؛ // ستون جدول 1.
echo "

"؛ // انتهای ستون جدول 2.
echo "

"؛ // انتهای ردیف جدول.
}
// انتهای جدول.
پژواک "

ID مقدار
" ، x x ، " "؛ // ستون جدول 2 آغاز می شود.
if (x_value> = 500) echo "
other echo "
echo x_value؛
echo "


}
}
echo ""؛ // انتهای بدن.
echo ""؛ // انتهای صفحه.
؟>

شکل 2: این بار یک اسکریپت پایتون یک فایل HTML پویا تولید می کند (همانطور که در نوار آدرس مرورگر مشاهده می شود).

اوه ، سرور وب نیاز داشت …

انجام این کار مشکل باز و بسته شدن پورت سریال و از بین رفتن داده ناشی از آن را برطرف می کند ، اما برای اجرا در پس زمینه نیاز به یک اسکریپت دارد. اگر این یک اسکریپت PHP است ، پس کامپیوتر باید بتواند اسکریپت های PHP را اجرا کند. همچنین برای تهیه صفحه وب PHP به یک مرورگر به یک سرور وب نیاز دارید. اگر اینگونه نباشد ، مرورگر كد PHP را به جای خود صفحه به سادگی نشان می دهد. روش سنتی انجام این کار با نصب بسته ای به اصطلاح "AMP" یا "WAMP" است. AMP مخفف Apache-MySQL-PHP است ، "W" مربوط به ویندوز است ، و در کنار هم آنها یک سرور وب آواز همه رقص را تشکیل می دهند.

از PHP استفاده نکنید …

ما این روش را امتحان کرده ایم و توانسته ایم آن را عملی کنیم ، اما بدون مشکل نیست. علاوه بر مشکلات در راه اندازی وب سرور ، مشکل اصلی که با آن روبرو شدیم گرفتن PHP برای باز کردن مطمئن یک درگاه سریال برای دریافت داده ها بود. به نظر می رسد با جستجوی اینترنت ، فقط یک کتابخانه PHP برای ارتباطات سریال ، سریال PHP وجود دارد. به نظر می رسد که همه دیگران از آن مشتق شده اند. همانطور که نویسنده در صفحه GitHub ذکر می کند: " ویندوز: به نظر می رسد برای برخی افراد کار می کند ، برای برخی دیگر کار نمی کند. " ما به وضوح در گروه دوم قرار داشتیم. برای اینکه ارتباطات سریالی برای کار با PHP برقرار شود ، ابتدا باید برنامه را با یک سریال ترمینال سریال درگاه را باز و بلافاصله بسته کنیم (به عنوان مثال Tera Term) غیرممکن است که در غیر این صورت پیش برود بنابراین ما متد PHP را کنار زدیم و به جای آن به دنبال پایتون رفتیم.

… بجای استفاده از پایتون

پایتون 3 با PySerial معلوم شد که در کامپیوتر تست ویندوز 10 کاملاً خوب عمل می کند ، بنابراین ما اسکریپتی نوشتیم تا داده ها را از درگاه سریال بخوانیم و صفحه وب را حاوی داده ها بنویسیم. اکنون که دیگر نیازی به PHP نیست ، ممکن است اسکریپت پایتون یک پرونده HTML ساده Listing 3.

Listing 3.

Listing 3: اسکریپت پایتون را بخواند که داده ها را از درگاه سریال می خواند و یک فایل HTML تولید می کند.

سریال وارداتی
زمان وارد کردن

file_name = "serial.html" # پس از ایجاد ، این پرونده را در یک مرورگر باز کنید.

# درگاه شماره سریال را تنظیم کنید. و سرعت خود را به سیستم خود بسپارید.
serial_port = 'COM15'
baudrate = 115200

page_title = "آردوینو در پایتون"؛

def write_page (data_list):
fo = open (پرونده_ نام ، "w +")
# شروع صفحه HTML.
fo.write ("")
fo.write (" " + page_title + "") # صفحه و سر شروع می شود.
fo.write ("[")
fo.write ("")
fo.write ("")
fo.write ("")
fo.write ("")
fo.write ("

" + page_title + "[

") # انتهای سر ، بدن شروع می شود.

# جدول شروع می شود.
fo.write ("

")
fo.write ("

")
برای من در محدوده (0 ، لن (داده_ لیست) ، 2):
fo.write ("[

") # ردیف جدول شروع می شود.
fo.write ("[

") # ستون جدول 1.
fo.write ("[

") # ستون جدول 2 انتها.
fo.write ("[

") # انتهای ردیف جدول.
fo.write ("

ID مقدار
" + data_list [i] + " ") # ستون جدول 2 آغاز می شود.
fo.write ("<font color = '")
# مقادیر> = 500 به رنگ سبز چاپ می شود ، مقادیر کوچکتر قرمز خواهد بود.
if (int (data_list [i+1])> = 500): fo.write ("green")
دیگری: fo.write ("قرمز")
fo.write (""> ")
fo.write (data_list [i+1])
fo.write ("[

") انتهای جدول.
fo.write ("") انتهای بدن.
fo.write ("[") # انتهای صفحه.
# انجام شد ، پرونده نزدیک.
fo.close ()

s = serial.Serial (serial_port، baudrate) # پورت سریال باز.
s.dtr = 0 # بازنشانی آردوینو.
s.dtr = 1
چاپ ("منتظر داده ها …")؛
time.sleep (2) # صبر کنید تا آردوینو بوت خود را تمام کند.
s.reset_input_buffer () # حذف هرگونه داده قدیمی.

در حالی که 1:
data_str = s.readline () رمزگشایی () # داده را بخوانید و بایت ها را به نوع رشته تبدیل کنید.
# پاک کردن داده های ورودی.
# قالب پیش بینی شده: "$، id1، مقدار1، id2، ارزش2، …، CRLF"
data_str = data_str.replace (''، '') # فضای سفید را حذف کنید.
data_str = data_str.replace (' r'، '') # حذف را حذف کن.
data_str = data_str.replace (' n'، '') # خط جدید را حذف کنید.
data_str + = '123،65،1،999، cpv، 236' # افزودن داده های بیشتر
چاپ (data_str)
# تقسیم داده ها در زمینه های جدا شده توسط "،".
data_list = data_str.split ("،")
del data_list [0] # حذف '$'
# صفحه HTML بنویسید.
write_page (data_list)

تمام قالب بندی داده های انجام شده توسط صفحه وب PHP می توانند بطور مستقیم در پایتون انجام شوند. همه چیز اکنون در یک مکان است. وب سایت ممکن است هنوز توسط یک وب سرور (سرویس در نظر گرفته شده) ارائه شود ، اما یک مرورگر همچنین می تواند بدون هیچ یک صفحه را نمایش داده و تازه کند. بنابراین ، دیگر نیازی به بسته بندی (W) AMP نیست ، و همه چیز را بسیار ساده تر می کند.

شکل 3: این طرح Arduino یک جریان داده سریال تولید می کند که

صداگذاری کردن
در این مقاله ما روش نمایش داده های سریال در یک مرورگر وب را ارائه دادیم. روش نه جدید ، منحصر به فرد و یا "بهترین" نیست. اگر از راه دیگری – ساده تر ، ظریف تر ، و هر چه می دانید – لطفاً با استفاده از دکمه در زیر دکمه اضافه کردن نظر را با ما در میان بگذارید. و البته ، شما نیازی به نوشتن اسکریپت پایتون ندارید ، در صورت تمایل به استفاده از هر زبان برنامه نویسی قادر به انجام ارتباطات سریال و نوشتن پرونده ها. مزیت استفاده از پایتون با pySerial این است که در دستگاه های ویندوز ، macOS و Linux (و موارد دیگر) اجرا می شود.
کدی که برای این مقاله در قالب اسکریپت های PHP و Python ایجاد شده است ، و یک طرح آردوینو را می توانید در زیر بارگیری کنید.
(170111)


آیا می خواهید مقالات بیشتری از ElektorLabs بخوانید؟ اکنون عضو Elektor شوید!

برچسب‌ها:, , , , , , ,