چگونگی ساخت فونت دلخواه برای کتابخانه u8g2

نوشته شده توسط آی دریمز در 23 سپتامبر 2019

در آموزش قبل، نحوه نمایش کلمات فارسی بر روی نمایشگر با استفاده از کتابخانه u8g2 را یاد گرفتیم. در این پست می خواهم چگونگی ساخت فونت جدید (فونت فارسی) و استفاده از آن را در کتابخانه u8g2 آموزش دهم. همان طور که احتمالاً متوجه شدید کتابخانه u8g2 از فونت های BDF استفاده می کند که سایز و نوع فونت از قبل ساخته شده است به عبارت دیگر شما فونتی با سایز 14 ساخته اید حالا در برنامه نیاز دارید از فونتی با سایز بالاتر یا پایین تر استفاده کنید، برای این کار باید مجدد، فونتی با سایز مورد نظر خود، بسازید!

برای تبدیل فونت ها به فرمت قابل استفاده در کتابخانه u8g2 نیاز به دو ابزار داریم. ابتدا لازم است با استفاده از برنامه otf2bdf فونت خود را به فرمت bdf تبدیل نمایید. ابتدا برنامه otf2bdf را از اینجا دریافت نموده، سپس با دستور زیر فونت خود را تبدیل کنید. این برنامه در ویندوز و لینوکس تست شده است و قابل استفاده است.

otf2bdf.exe -r 72 -p 16 myfont.ttf -o myfont16.bdf

عدد 16 در اینجا سایز دلخواه فونت شماست که کلمات قرار است بر روی نمایشگر به این سایز، نمایش داده شود. همچنین myfont.ttf فونت ورودی و myfont16.bdf خروجی خواهد بود. عدد 72 رزولوشن یا کیفیت خروجی خواهد بود.

در مرحله بعد باید فایل bdf را به کمک برنامه bdfconv به فرمت قابل استفاده در کتابخانه u8g2 تبدیل کنیم. ابتدا برنامه bdfconv را دریافت نموده و سپس با دستور زیر، آن را تبدیل نمایید.

bdfconv -f 1 -v -m "32-65535" -n myfont16 -o myfont16.c myfont16.bdf

عدد 32 تا 65535 بازۀ کاراکترهای قابل تبدیل در فونت است که بهتر است این عدد را تغییر ندهیم تا تمام کاراکترهای مورد نیازمان تبدیل شود. اگر از سیستم عامل ویندوز استفاده می کنید حتما از دابل کوتیشن برای تعیین بازۀ کاراکترها استفاده کنید.

myfont16.c نام فایل خروجی خواهد بود و myfont16 نام متغیری است که اطلاعات تبدیل شده را در فایل c نگهداری می کند. برای اطلاع از سایر پارامترها از دستور help استفاده نمایید. در پایان برای استفاده از این فونت در برنامه، یا محتویات آن را در فایل پروژه تان وارد کنید یا با دستور

include myfont16.c#

فایل را در پروژه تان، فراخوانی کنید. سپس با دستور زیر از فونت استفاده نمایید.

(u8g2.setFont(myfont16

نکته: در اکثر مواقع بعد از تبدیل فونت، اشکالاتی هنگام نمایش برخی از حروف روی نمایشگر مشاهده می شود. بهتر است برای رفع ایرادات احتمالی از برنامه FontForge استفاده کنید و حروف را تصحیح نمایید. علاوه بر این، طبق توضیحات نویسنده u8g2 برخی سایزها در یک فونت بعد از تبدیل، دارای ایراد هستند که با تغییر سایزِ فونت و یا تغییر پارامترها، ممکن است اشکالات برطرف می شود.

نکته: همان طور که قبلاً اشاره شد کتابخانه u8g2 فقط بر روی نمایشگرهای تک رنگ قابل استفاده است و برای نمایشگرهای رنگی نمی توان از این کتابخانه استفاده کرد.

10 دیدگاه دسته‌بندی : آردوینو, آموزش

فارسی نویسی در آردوینو با کتابخانه u8g2

نوشته شده توسط آی دریمز در 17 سپتامبر 2019

یکی از کتابخانه های بسیار پیشرفته که در زمینه راه اندازی طیف وسیعی از نمایشگرها (نمایشگرهای تک رنگ) در آردوینو ساخته شده است، کتابخانه u8g2 است. این کتابخانه ویژگی های منحصر به فردی دارد که یکی از آنها، پشتیبانی از زبان هایی مانند فارسی، عربی، ژاپنی و… است. علاوه بر این می توان از فونت و سایز دلخواه، برای نمایش کلمات استفاده کرد و هیچ محدودیتی در این زمینه وجود ندارد. حتی می توان فونت دلخواه برای آن طراحی کرد!
این کتابخانه بصورت پیش فرض در نمایش حروف فارسی یا عربی مشکل دارد و حروف را بصورت جدا از هم نمایش می دهد. برای رفع این مشکل توابعی نوشتم تا بتوان کلمات فارسی یا عربی را دوباره از ابتدا طراحی کرد و حروف را بصورت درست کنار هم قرار داد. برای استفاده از توابع نیاز به کار خاصی نخواهید داشت، کافیست کتابخانه u8g2 را بر روی آردوینو نصب کنید، نمایشگر خود را به بُرد آردوینو متصل کرده و سپس مثال معرفی شده را دانلود و روی بُرد خود آپلود کنید. (البته لازم است نوع نمایشگر و نحوه اتصال آن را در این خط ویرایش نمایید.) نتیجه بصورت تصویر بالا خواهد بود. امیدوارم توضیحات فوق، برایتان مفید بوده باشد.

این کتابخانه یا مثال، اختصاصاً برای کتابخانه u8g2 نوشته شده است اما می توان با کمی تغییرات در جاهای دیگر هم از آن استفاده کرد. برای قسمت های مختلف این کد، زحمات زیادی کشیده شده و می توان ادعا کرد، برای اولین بار است که در اینترنت، فارسی نویسی مستقیم روی نمایشگرهای LCD یا OLED با فونت و سایز دلخواه با کمک آردوینو، منتشر شده است، لذا استفاده از این کد بصورت شخصی و تجاری، صرفاً فقط با ذکر نام پدید آورنده، مجاز است.
لطفاً مشکلات یا سئوالات خود را در قسمت نظرات مطرح بفرمایید. اگر این کد زمان توسعه پروژه شما را کاهش داد و به شما کمک کرد، من را به یک فنجان قهوه، مهمان کنید.

علاوه بر این، قبلاً کتابخانه ای برای نمایش کلمات فارسی معرفی کرده بودم که دارای محدودیت سایز و فونت بود و سایز هر حرف، حداکثر 8 در 8 پیکسل بود و نمی توانستیم سایز یا نوع فونت کلمات را تغییر دهیم. این مشکل با معرفی روش بالا برطرف می شود.

14 دیدگاه دسته‌بندی : آردوینو, آموزش

راهنمای فارسی نویسی روی نمایشگرهای پیکسلی در آردوینو

نوشته شده توسط آی دریمز در 9 آگوست 2018

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

نکته ای که همین ابتدا لازم به ذکر است اینکه در این روش نیاز هست کتابخانه نمایشگرِ شما حتماً تابعی به نام writepixel داشته باشد تا بتوان در هر نقطه از نمایشگر، پیکسلی با رنگ دلخواه رسم کرد. بیشتر کتابخانه های مطرحِ نمایشگرها (مانند Adafruit SSD1306) این تابع را دارند و جای نگرانی نیست.

برای شروع کار ابتدا این فایل را دریافت نموده و آن را با آردوینو باز نمایید. در این مثال من از یک نمایشگر 64×128 پیکسل با درایور SSD1306 و رابط SPI استفاده کردم که بسیار معمول هست و در بازار ایران به وفور یافت می شود. در صورت تمایل می توانید از سایر نمایشگر های پیکسلی مانند نمایشگر 5110 نیز استفاده کنید.

همان طور که مشاهده می کنید من از کتابخانه های Adafruit SSD1306 و Adafruit GFX library برای نمایش نوشته ها و رسم اشکال استفاده کردم. پس لازم است این دو کتابخانه مطابق تصویر به آردوینو اضافه نمایید.

در پنجره Library Manager و کادر جستجو بالای آن (مطابق تصویر زیر)، نام کتابخانه ای که می خواهید نصب کنید بنویسید. بلافاصله در لیست زیر کادر جستجو، کتابخانه مورد نظر نمایش داده می شود. آن را انتخاب و کلید Install بزنید. بعد از زمان اندکی مراحل نصب به اتمام می رسد و کتابخانه به لیست کتابخانه های آردوینو اضافه خواهد شد. (این مراحل را برای نصب هر دو کتابخانه اشاره شده انجام دهید.)

اگر تمام مراحل را درست انجام داده باشید می توانید با زدن کلید کامپایل (کلیدی که در تصویر زیر با رنگ زرد هایلایت شده) از صحت نصب کتابخانه ها مطمئن شوید.

در ادامه به بررسی کدها می پردازیم، همان طور که در خطوط 18 تا 21 کدها مشاهده می کنید نوع اتصال نمایشگر من با آردوینو، از طریق SPI می باشد. اگر نمایشگر شما از نوع i2c است این قسمت را کامنت کنید و خطوط 25 و 26 را از کامنت خارج کنید.

در خطوط 11 تا 15 برای راحتی کار، چند تابع کوچک و دم دستی تعریف کردیم که باعث عملکرد سریعتر برنامه نویس خواهد شد. همان طور که ابتدای این آموزش توضیح دادم تمام مراحل نوشتن کاراکترهای فارسی روی نمایشگر توسط تابع writepixel در خط 11 انجام می شود.

اگر از نمایشگر و کتابخانه ای غیر از کتابخانه Adafruit SSD1306 استفاده می کنید حتما این خط را ویرایش کنید. در خط 12 عرض نمایشگر مورد استفاده تان را تعریف کنید. چون من از نمایشگر 64×128 پیکسل استفاده کردم در اینجا، هم می توانم عدد 128 را به عنوان عرض نمایشگر وارد کنم و هم می توانم، در فایل نصب شده کتابخانه Adafruit SSD1306 که بصورت پیش فرض در مسیر (C:\Users\ramin\Documents\Arduino\libraries\Adafruit_SSD1306\Adafruit_SSD1306.h) قابل مشاهده است (خطوط 73 تا 75)، سایز نمایشگر را تغییر دهم تا کتابخانه بصورت خودکار و با استفاده از تابع width عرض نمایشگر را در هر کجای برنامه برایم فراهم کند. خطوط 13 تا 15 به ترتیب برای تراز بندی وسط، راست و چپ متن مورد استفاده قرار می گیرد.

در پایان برای نمایش متن فارسی روی نمایشگر، از خطوط 158 و 161 استفاده می کنیم. برای نمایش اعداد لازم است رشته اعداد را ابتدا معکوس کنید که این کار توسط تابع strreverse انجام می شود. در انتها چون از کتابخانه Adafruit SSD1306 استفاده کردیم با استفاده از خط 164 خروجی را به نمایشگر می فرستیم.

امیدوارم توضیحات فوق، مفید بوده باشد. در صورت هر گونه مشکل یا سئوال لطفاً در قسمت نظرات مطرح بفرمایید. اگر این کد زمان توسعه پروژه شما را کاهش داد و به شما کمک کرد من را به یک فنجان قهوه، مهمان کنید 🙂

21 دیدگاه دسته‌بندی : آردوینو, آموزش

فارسی نویسی با آردوینو روی نمایشگرهای LCD و OLED

نوشته شده توسط آی دریمز در 17 ژوئن 2018

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

یکی از نکات قابل توجه این است که این کد با تغییرات بسیار کم بر روی تمام بُردهای خانوادۀ آردوینو قابل استفاده است، همچنین می توان بر روی تمام نمایشگرهای پیکسلی (LCD,OLED) و RGB از آن استفاده نمود.

برای قسمت های مختلف این کد، زحمات زیادی کشیده شده و میشه ادعا کرد برای اولین بار است که در اینترنت، فارسی نویسی مستقیم روی نمایشگرهای LCD و OLED با کمک آردوینو، منتشر شده است، لذا استفاده از این کد، بصورت شخصی و تجاری صرفاً فقط با ذکر نام پدید آوردگان آن مجاز است.

بدون دیدگاه دسته‌بندی : آردوینو