سلام 👋
من دارم دورهی STM32 رو به صورت ویدیویی و پلهپله ضبط میکنم. الان که وسطای کاریم، شما میتونید با تخفیف ویژه وارد دوره بشید، هم ویدیوهای منتشرشده رو ببینید هم هر جلسهی جدیدی که ضبط میشه رو بلافاصله دریافت کنید.
استایل دوره به صورت پروژه محور هست و هر مبحث رو با مثال های عملی تست میکنیم.
فرصت تخفیف تا وقتی دوره در حال ضبطه فعاله.
برای اطلاعات بیشتر و ثبت نام:
@Alixahedi
من دارم دورهی STM32 رو به صورت ویدیویی و پلهپله ضبط میکنم. الان که وسطای کاریم، شما میتونید با تخفیف ویژه وارد دوره بشید، هم ویدیوهای منتشرشده رو ببینید هم هر جلسهی جدیدی که ضبط میشه رو بلافاصله دریافت کنید.
استایل دوره به صورت پروژه محور هست و هر مبحث رو با مثال های عملی تست میکنیم.
فرصت تخفیف تا وقتی دوره در حال ضبطه فعاله.
برای اطلاعات بیشتر و ثبت نام:
@Alixahedi
4❤🔥3🔥1😍1
میخوای از آردوینو فراتر بری و پروژه حرفهای بسازی؟
🚀 از «صفر» تا ساخت اولین پروژه با STM32
🎯 تمرینهای قدمبهقدم + چکلیستها
🎥 آموزش ویدیویی + دسترسی همیشگی + آپدیت رایگان
🧑💻 پشتیبانی مستقیم مدرس
💥 50% تخفیف مخصوص دانشجویان و دانشآموزان
برای ثبتنام همین الان به @Alixahedi تلگرام پیام بده.
#STM32 #میکروکنترلر #آموزش_الکترونیک #برنامه_نویسی #EmbeddedSystems #دوره_آموزشی #الکترونیک_عملی
🚀 از «صفر» تا ساخت اولین پروژه با STM32
🎯 تمرینهای قدمبهقدم + چکلیستها
🎥 آموزش ویدیویی + دسترسی همیشگی + آپدیت رایگان
🧑💻 پشتیبانی مستقیم مدرس
💥 50% تخفیف مخصوص دانشجویان و دانشآموزان
برای ثبتنام همین الان به @Alixahedi تلگرام پیام بده.
#STM32 #میکروکنترلر #آموزش_الکترونیک #برنامه_نویسی #EmbeddedSystems #دوره_آموزشی #الکترونیک_عملی
5❤🔥4⚡1😍1💯1
کمپانی SECO پنل HMI صنعتی Pi Vision 10.1 CM5 را معرفی کرد؛
مبتنی بر Raspberry Pi Compute Module 5**، با بدنه آلومینیومی، نمایشگر لمسی ۱۰.۱ اینچ **1280×800 و IP66 از سمت جلو. نرمافزار از ابتدا با Raspberry Pi OS یا Clea OS (پشتیبانی OTA، مدیریت ناوگان) آماده است. قیمت طرح دسترسی زودهنگام از ۲۳۹ یورو اعلام شده.
خلاصه فنی: BCM2712 (۴× Cortex-A76 تا ۲.۴GHz)، تا ۸GB LPDDR4-ECC، GbE، USB 3.0، اسلات M.2 (PCIe x1) برای NVMe/شتابدهندههای AI
ویدیو محصول:
https://youtu.be/r_qptW1bw6A
#Embedded #RaspberryPi #CM5 #HMI #IIoT #OTA #EdgeAI
مبتنی بر Raspberry Pi Compute Module 5**، با بدنه آلومینیومی، نمایشگر لمسی ۱۰.۱ اینچ **1280×800 و IP66 از سمت جلو. نرمافزار از ابتدا با Raspberry Pi OS یا Clea OS (پشتیبانی OTA، مدیریت ناوگان) آماده است. قیمت طرح دسترسی زودهنگام از ۲۳۹ یورو اعلام شده.
خلاصه فنی: BCM2712 (۴× Cortex-A76 تا ۲.۴GHz)، تا ۸GB LPDDR4-ECC، GbE، USB 3.0، اسلات M.2 (PCIe x1) برای NVMe/شتابدهندههای AI
ویدیو محصول:
https://youtu.be/r_qptW1bw6A
#Embedded #RaspberryPi #CM5 #HMI #IIoT #OTA #EdgeAI
❤🔥2❤1👍1
سلام
رزومهم رو به شکل یک سایت شخصی ساده و حرفهای طراحی کردم تا بهجای فایل و عکس، یک لینک مرتب و قابل اشتراک داشته باشم.
این مدل سایت هزینه هاست و دامنه نداره و در عین حال کاملاً حرفهایه و برای اپلای دانشگاه و جابهای خارجی خیلی خوبه چون کارفرما/کمیته پذیرش راحت و سریع میتونه ببینتش (چون گیت هاب هست دردسر ای پی داخل و خارج ایران رو نداره).
نمونه:
https://alixahedi.github.io
اگر شما هم دوست دارید برای خودتون همچین رزومهسایتی داشته باشید، پیام بدید:
@Alixahedi
رزومهم رو به شکل یک سایت شخصی ساده و حرفهای طراحی کردم تا بهجای فایل و عکس، یک لینک مرتب و قابل اشتراک داشته باشم.
این مدل سایت هزینه هاست و دامنه نداره و در عین حال کاملاً حرفهایه و برای اپلای دانشگاه و جابهای خارجی خیلی خوبه چون کارفرما/کمیته پذیرش راحت و سریع میتونه ببینتش (چون گیت هاب هست دردسر ای پی داخل و خارج ایران رو نداره).
نمونه:
https://alixahedi.github.io
اگر شما هم دوست دارید برای خودتون همچین رزومهسایتی داشته باشید، پیام بدید:
@Alixahedi
👍7❤🔥6❤3🔥1👌1🏆1🆒1
سلام
اومدم تجربه ای که امروز داشتم رو به اشتراک بزارم باهاتون!
من با رزبری زیرو از طریق وایفای و SSH کار میکردم و کلاً از راه دور همه چی رو پیش میبردم، تا اینکه یهو و بیهوا SSH قطع شد و دیگه هرچی میزدم وصل نمیشد. مشکل این بود که سیستمعاملم رابط گرافیکی نداشت، از اون بدتر USB رو هم قبلاً یه جوری تنظیم کرده بودم که دیگه نمیشد کیبورد و ماوس وصل کرد. یعنی رسماً هیچ راهی برای ورود به رزبری نداشتم.
اولین چیزی که به ذهنم رسید این بود که سیستمعامل رو عوض کنم، ولی این یعنی همه کارهایی که چند روز روش وقت گذاشته بودم میپرید. برای همین گفتم قبل از هر کاری باید فایلهام رو از توش دربیارم، مخصوصاً اون پوشهای که همه دیتای مهمم توش بود.
یه کم سرچ کردم و فهمیدم ویندوز خودش نمیتونه فایلهای اصلی رزبری رو ببینه، چون پارتیشنش لینوکسیه. اینجا بود که با یه نرمافزار به اسم DiskInternals Linux Reader کارم راه افتاد. با همین برنامه تونستم خیلی راحت پوشهای که لازم داشتم رو مستقیم از روی SD کارت بردارم.
مراحل کار با DiskInternals Linux Reader
1. کارت SD رزبری رو درآوردم و با کارتخوان زدم به ویندوز.
2. برنامه DiskInternals Linux Reader رو باز کردم.
3. توی برنامه SD کارت رو پیدا کردم، خودش پارتیشن لینوکسی رو هم تشخیص داد.
4. رفتم داخل پارتیشن اصلی و پوشهای که فایلهام توش بود رو پیدا کردم (معمولاً توی مسیر home هست).
5. روی پوشه راستکلیک کردم و گزینه Save یا Save Files رو زدم.
6. یه مسیر توی ویندوز انتخاب کردم تا پوشه همونجا برام کپی بشه.
به همین راحتی، بدون اینکه رزبری بالا بیاد یا مجبور بشم سیستمعامل رو عوض کنم، فایلهام رو از روی SD کارت نجات دادم.
اومدم تجربه ای که امروز داشتم رو به اشتراک بزارم باهاتون!
من با رزبری زیرو از طریق وایفای و SSH کار میکردم و کلاً از راه دور همه چی رو پیش میبردم، تا اینکه یهو و بیهوا SSH قطع شد و دیگه هرچی میزدم وصل نمیشد. مشکل این بود که سیستمعاملم رابط گرافیکی نداشت، از اون بدتر USB رو هم قبلاً یه جوری تنظیم کرده بودم که دیگه نمیشد کیبورد و ماوس وصل کرد. یعنی رسماً هیچ راهی برای ورود به رزبری نداشتم.
اولین چیزی که به ذهنم رسید این بود که سیستمعامل رو عوض کنم، ولی این یعنی همه کارهایی که چند روز روش وقت گذاشته بودم میپرید. برای همین گفتم قبل از هر کاری باید فایلهام رو از توش دربیارم، مخصوصاً اون پوشهای که همه دیتای مهمم توش بود.
یه کم سرچ کردم و فهمیدم ویندوز خودش نمیتونه فایلهای اصلی رزبری رو ببینه، چون پارتیشنش لینوکسیه. اینجا بود که با یه نرمافزار به اسم DiskInternals Linux Reader کارم راه افتاد. با همین برنامه تونستم خیلی راحت پوشهای که لازم داشتم رو مستقیم از روی SD کارت بردارم.
مراحل کار با DiskInternals Linux Reader
1. کارت SD رزبری رو درآوردم و با کارتخوان زدم به ویندوز.
2. برنامه DiskInternals Linux Reader رو باز کردم.
3. توی برنامه SD کارت رو پیدا کردم، خودش پارتیشن لینوکسی رو هم تشخیص داد.
4. رفتم داخل پارتیشن اصلی و پوشهای که فایلهام توش بود رو پیدا کردم (معمولاً توی مسیر home هست).
5. روی پوشه راستکلیک کردم و گزینه Save یا Save Files رو زدم.
6. یه مسیر توی ویندوز انتخاب کردم تا پوشه همونجا برام کپی بشه.
به همین راحتی، بدون اینکه رزبری بالا بیاد یا مجبور بشم سیستمعامل رو عوض کنم، فایلهام رو از روی SD کارت نجات دادم.
❤13❤🔥2👏1🙏1👌1😍1
سلام،
یه انتقال تجربه که ممکنه برای شما هم اتفاق بیوفته و گفتم که بهتون بگم تا خیلی مراقب باشین که هک نشین.
من امروز یه پست توی لینکدین گذاشتم و درجا زیر پست یه کامنت اومد با لوگو لینکدین که این پست شما با قوانین ما همخونی نداره برای اطلاعات بیشتر و جلوگیری از بن شدن اکانتتون روی این لینک کلیک کنید و وارد بشین. من روی لینک کلیک کردم و یک صفحه ورود کاملا شبیه به لینکدین برام باز شد فکر کردم دوباره باید لاگین کنم. یکم بیشتر که توجه کردم دیدم اصلا لینک هیچ شباهتی با لینک رسمی لینکدین نداره و اسکم بود!!!
یکسری ربات های اینشکلی برای هک کردن اکانت ها طراحی شدن و باعث میشن شما باور کنید که چی میگن و اکانتتون هک شه. خواستم این رو باهاتون به اشتراک بزارم که شما دچار این مشکل نشین.
باتشکر،
علی زاهدی
یه انتقال تجربه که ممکنه برای شما هم اتفاق بیوفته و گفتم که بهتون بگم تا خیلی مراقب باشین که هک نشین.
من امروز یه پست توی لینکدین گذاشتم و درجا زیر پست یه کامنت اومد با لوگو لینکدین که این پست شما با قوانین ما همخونی نداره برای اطلاعات بیشتر و جلوگیری از بن شدن اکانتتون روی این لینک کلیک کنید و وارد بشین. من روی لینک کلیک کردم و یک صفحه ورود کاملا شبیه به لینکدین برام باز شد فکر کردم دوباره باید لاگین کنم. یکم بیشتر که توجه کردم دیدم اصلا لینک هیچ شباهتی با لینک رسمی لینکدین نداره و اسکم بود!!!
یکسری ربات های اینشکلی برای هک کردن اکانت ها طراحی شدن و باعث میشن شما باور کنید که چی میگن و اکانتتون هک شه. خواستم این رو باهاتون به اشتراک بزارم که شما دچار این مشکل نشین.
باتشکر،
علی زاهدی
❤🔥11🙏9❤4🔥2😍1
📦 LanBox – Instant LAN File Sharing & Notes
Stop using cloud services for local transfers.
LanBox turns your local network into a fast, private sharing hub.
✨ Features
✅ Drag-and-drop files (up to 5GB)
✅ Shared notes wall – add, copy, delete
✅ Light/Dark theme + mobile-ready UI
✅ Auto-refresh for files & notes
✅ mDNS support – access via http://lanbox.local:3000
✅ Windows startup script (runs hidden)
✅ Zero-cloud, local-first
🚀 Quick start
Then open http://localhost:3000
💡 Perfect for:
· Office / home LAN
· No-internet environments
· Self-hosted & privacy-focused setups
📥 Repo:
👉 github.com/alixahedi/LanBox
#SelfHosted #FileSharing #LAN #Privacy #OpenSource
Stop using cloud services for local transfers.
LanBox turns your local network into a fast, private sharing hub.
✨ Features
✅ Drag-and-drop files (up to 5GB)
✅ Shared notes wall – add, copy, delete
✅ Light/Dark theme + mobile-ready UI
✅ Auto-refresh for files & notes
✅ mDNS support – access via http://lanbox.local:3000
✅ Windows startup script (runs hidden)
✅ Zero-cloud, local-first
🚀 Quick start
git clone https://github.com/alixahedi/LanBox
cd LanBox
pip install -r requirements.txt
python server.py
Then open http://localhost:3000
💡 Perfect for:
· Office / home LAN
· No-internet environments
· Self-hosted & privacy-focused setups
📥 Repo:
👉 github.com/alixahedi/LanBox
#SelfHosted #FileSharing #LAN #Privacy #OpenSource
👍4🔥1🦄1
When creating Raspberry Pi SD card backups, the generated image file is usually the full size of the SD card, even if only a small amount of storage is actually used.
For example, an SD card with only 4GB of data may still produce a 32GB image file because empty space is included in the backup.
A useful solution for this is PiShrink.
PiShrink shrinks the Linux partition inside the image and removes unused space, significantly reducing the final image size without deleting data.
It can also be used on Windows through WSL (Windows Subsystem for Linux).
Basic workflow:
- Install WSL with Ubuntu
- Move the Raspberry Pi image into the Linux environment
- Clone PiShrink from GitHub:
- Enter the project directory:
- Give execute permission to the script:
- Run the script:
After processing, image sizes can be reduced dramatically depending on the amount of used space.
PiShrink is especially useful for Raspberry Pi backup, archive, and image distribution workflows.
For example, an SD card with only 4GB of data may still produce a 32GB image file because empty space is included in the backup.
A useful solution for this is PiShrink.
PiShrink shrinks the Linux partition inside the image and removes unused space, significantly reducing the final image size without deleting data.
It can also be used on Windows through WSL (Windows Subsystem for Linux).
Basic workflow:
- Install WSL with Ubuntu
- Move the Raspberry Pi image into the Linux environment
- Clone PiShrink from GitHub:
git clone https://github.com/Drewsif/PiShrink.git
- Enter the project directory:
cd PiShrink
- Give execute permission to the script:
chmod +x pishrink.sh
- Run the script:
sudo ./pishrink.sh your_image.img
After processing, image sizes can be reduced dramatically depending on the amount of used space.
PiShrink is especially useful for Raspberry Pi backup, archive, and image distribution workflows.
GitHub
GitHub - Drewsif/PiShrink: Make your pi images smaller!
Make your pi images smaller! Contribute to Drewsif/PiShrink development by creating an account on GitHub.
⚡1❤🔥1🦄1
Raspberry Pi Has a Built-in Serial Debug Interface
Behind the headphone jack on Pi 3B, 4, and 400… there's a hidden UART serial console.
Not for audio - for low-level debugging.
🎛️ What it does:
Gives you direct access to the Pi's boot logs and a Linux terminal - even with no network, no display, no keyboard.
🧩 The catch:
It's mapped to GPIO 14 (TX) and 15 (RX)… but Bluetooth steals it by default.
🔧 To enable:
· Add enable_uart=1 to /boot/config.txt
· Disable Bluetooth console: sudo systemctl disable hciuart
Then connect a USB-to-Serial adapter (3.3V!) to pins 14/15 + GND — and you're in.
📡 Why it's powerful:
· Debug boot failures when SSH/HDMI are dead
· Headless setup without network
· View kernel panics in real time
Most people never touch it. But pros keep a serial adapter in their toolbox.
Now you know the Pi's backdoor 🚪🤫
#RaspberryPi #SerialConsole #EmbeddedDebug #ProTip
Behind the headphone jack on Pi 3B, 4, and 400… there's a hidden UART serial console.
Not for audio - for low-level debugging.
🎛️ What it does:
Gives you direct access to the Pi's boot logs and a Linux terminal - even with no network, no display, no keyboard.
🧩 The catch:
It's mapped to GPIO 14 (TX) and 15 (RX)… but Bluetooth steals it by default.
🔧 To enable:
· Add enable_uart=1 to /boot/config.txt
· Disable Bluetooth console: sudo systemctl disable hciuart
Then connect a USB-to-Serial adapter (3.3V!) to pins 14/15 + GND — and you're in.
📡 Why it's powerful:
· Debug boot failures when SSH/HDMI are dead
· Headless setup without network
· View kernel panics in real time
Most people never touch it. But pros keep a serial adapter in their toolbox.
Now you know the Pi's backdoor 🚪🤫
#RaspberryPi #SerialConsole #EmbeddedDebug #ProTip
⚡3❤1❤🔥1🤝1🦄1
Many engineers say they are "running Linux on a microcontroller," but in reality, most microcontrollers cannot run standard Linux at all.
Why? 🤔
Linux requires a hardware feature called an MMU (Memory Management Unit) for virtual memory, process isolation, and memory protection. Most popular MCUs, including STM32, ESP32, and AVR devices, don't have an MMU.
That's why microcontrollers typically run:
✅ Bare-metal firmware
✅ FreeRTOS
✅ Zephyr
✅ ThreadX
Instead of Linux.
💡The STM32 family is a great example of this distinction. While an STM32F4 or STM32H7 cannot run Linux, the STM32MP1 series includes Cortex-A cores with an MMU, allowing it to run Embedded Linux alongside a Cortex-M core for real-time tasks.
This means you can run Linux and FreeRTOS on the same chip at the same time!
#EmbeddedSystems #EmbeddedLinux #STM32 #RTOS #FreeRTOS #Firmware #Electronics #IoT
Why? 🤔
Linux requires a hardware feature called an MMU (Memory Management Unit) for virtual memory, process isolation, and memory protection. Most popular MCUs, including STM32, ESP32, and AVR devices, don't have an MMU.
That's why microcontrollers typically run:
✅ Bare-metal firmware
✅ FreeRTOS
✅ Zephyr
✅ ThreadX
Instead of Linux.
💡The STM32 family is a great example of this distinction. While an STM32F4 or STM32H7 cannot run Linux, the STM32MP1 series includes Cortex-A cores with an MMU, allowing it to run Embedded Linux alongside a Cortex-M core for real-time tasks.
This means you can run Linux and FreeRTOS on the same chip at the same time!
#EmbeddedSystems #EmbeddedLinux #STM32 #RTOS #FreeRTOS #Firmware #Electronics #IoT
👍3❤🔥1🔥1👌1🦄1
Hi 👋
There’s something I ran into a while ago that wasted a lot of my time, so I thought it might be useful to share here.
When working with STM32 + Interrupts + FreeRTOS, or even in pure bare-metal projects, you might hit a really annoying bug:
- The code runs
- Interrupts are enabled
- Everything looks fine
- But suddenly the system “freezes” or some interrupts just stop firing 😐
First instinct is usually:
NVIC configuration
Clock setup
Interrupt handlers
Or even hardware issues
But there’s something we often overlook:
────────── ✦ ──────────
⚠️ Wrong NVIC Priority Grouping
STM32 has a setting called:
or directly in the register:
The problem starts when:
You think you’re configuring preemption priorities correctly
But the actual priority grouping is different from what you assumed
Result?
- A low-priority interrupt can block a higher-priority one
- Or some interrupts never preempt as expected
- Or nesting simply doesn’t behave the way you think
────────── ✦ ──────────
A real-world example
I had a project with:
UART interrupt for incoming data
Timer interrupt for real-time control
A FreeRTOS task running in parallel
Everything looked fine at first…
But randomly, UART would just stop receiving data
After hours of debugging, the issue was:
- CubeMX default priority grouping was not what I assumed
- And the Timer interrupt was blocking UART due to incorrect preemption setup
────────── ✦ ──────────
🔧 Simple but important fix
Always explicitly set this at the start of your project:
Then define priorities clearly, not randomly:
────────── ✦ ──────────
💡 Key takeaway
If your system shows:
- Random freezes
- Intermittent interrupt behavior
- Or unpredictable timing issues
Check NVIC priority grouping before anything else
Not RAM
Not clock
Not even hardware 😄
This is one of those things that:
you don’t take seriously until it breaks your project
#EmbeddedSystems #STM32 #FreeRTOS #RTOS #Interrupts #Firmware #EmbeddedDebugging #Microcontrollers #IoT #TechInsights
There’s something I ran into a while ago that wasted a lot of my time, so I thought it might be useful to share here.
When working with STM32 + Interrupts + FreeRTOS, or even in pure bare-metal projects, you might hit a really annoying bug:
- The code runs
- Interrupts are enabled
- Everything looks fine
- But suddenly the system “freezes” or some interrupts just stop firing 😐
First instinct is usually:
NVIC configuration
Clock setup
Interrupt handlers
Or even hardware issues
But there’s something we often overlook:
────────── ✦ ──────────
⚠️ Wrong NVIC Priority Grouping
STM32 has a setting called:
HAL_NVIC_SetPriorityGrouping()
or directly in the register:
SCB->AIRCR
The problem starts when:
You think you’re configuring preemption priorities correctly
But the actual priority grouping is different from what you assumed
Result?
- A low-priority interrupt can block a higher-priority one
- Or some interrupts never preempt as expected
- Or nesting simply doesn’t behave the way you think
────────── ✦ ──────────
A real-world example
I had a project with:
UART interrupt for incoming data
Timer interrupt for real-time control
A FreeRTOS task running in parallel
Everything looked fine at first…
But randomly, UART would just stop receiving data
After hours of debugging, the issue was:
- CubeMX default priority grouping was not what I assumed
- And the Timer interrupt was blocking UART due to incorrect preemption setup
────────── ✦ ──────────
🔧 Simple but important fix
Always explicitly set this at the start of your project:
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
Then define priorities clearly, not randomly:
HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);
HAL_NVIC_SetPriority(TIM2_IRQn, 6, 0);
────────── ✦ ──────────
💡 Key takeaway
If your system shows:
- Random freezes
- Intermittent interrupt behavior
- Or unpredictable timing issues
Check NVIC priority grouping before anything else
Not RAM
Not clock
Not even hardware 😄
This is one of those things that:
you don’t take seriously until it breaks your project
#EmbeddedSystems #STM32 #FreeRTOS #RTOS #Interrupts #Firmware #EmbeddedDebugging #Microcontrollers #IoT #TechInsights
✍2👍2❤🔥1🦄1
What do you prefer for this channel?
Should I continue posting content in English, or switch back to Persian?
برای ادامه این کانال کدوم رو ترجیح میدید؟ محتواها رو به انگلیسی ادامه بدم یا برگردیم به فارسی؟
Should I continue posting content in English, or switch back to Persian?
برای ادامه این کانال کدوم رو ترجیح میدید؟ محتواها رو به انگلیسی ادامه بدم یا برگردیم به فارسی؟
Anonymous Poll
27%
English
73%
فارسی
خب سلام 👋
با توجه به این که اکثرا گفتن که به زبان فارسی برگردیم و یکم توی سبک پستهای قدیم کانال محتوا بنویسم، گفتم از یه تجربه واقعی این چند وقت براتون بگم.
چند وقتی هست کلاً سمت سختافزار نبودم و داشتم روی یه سری نرمافزار ویندوز با پایتون کار میکردم.
همه چی خوب پیش میرفت تا رسیدیم به یه مرحله مهم:
باید برای macOS هم خروجی میگرفتیم 😐
مشکل کجا بود؟
من برنامه رو با پایتون و PyInstaller نوشته بودم و برای ویندوز خیلی راحت خروجی میگرفتم:
ولی برای macOS یه نکته مهم وجود داره:
• معمولاً باید روی خود macOS بیلد بگیری
• یا حداقل یک محیط macOS داشته باشی
و اینجا بود که داستان جدی شد…
چون من اصلاً مک نداشتم 💀 البته یدونه مک تونستم قرض بگیرم و تست کنم ولی خب راه حل موقت بود.
راهحل: GitHub Actions
یه چیزی که خیلیها فقط برای CI/CD استفاده میکنن، ولی یه قابلیت خیلی مهم داره:
GitHub میتونه ماشین مجازی macOS بهت بده
یعنی بدون داشتن مک، میتونی روی macOS بیلد بگیری.
سناریو ما چی شد؟
میخواستیم این اتفاق بیفته:
• کد روی GitHub باشه
• با هر Push پروژه اجرا بشه
• روی macOS بیلد گرفته بشه
• خروجی PyInstaller ساخته بشه
• فایل نهایی قابل دانلود باشه
مرحله 1: ساخت Workflow
این فایل رو داخل پروژه بساز:
مرحله 2: کد GitHub Actions
این هم فایل کامل:
خروجی چی میشه؟
بعد از هر Push:
• GitHub یک سیستم macOS مجازی بالا میاره
• Python نصب میشه
• کتابخانهها نصب میشن
• PyInstaller اجرا میشه
• فایل خروجی داخل پوشه dist ساخته میشه
• از بخش Actions قابل دانلوده
⚠️ نکته مهم
این روش برای این موارد عالیه:
• ساخت فایل اجرایی macOS
• پروژههای شخصی
• تست و بیلد اتوماتیک
ولی برای این موارد کافی نیست:
• امضای رسمی اپ (Code Signing)
• Notarization اپل
• انتشار در App Store
اونجا باید Apple Developer Account داشته باشی.
در آخر کاری که کردم خیلی ساده بود:
به جای اینکه برم مک بخرم 😄
از GitHub خواستم یه مک مجازی برام بالا بیاره و خودش برام خروجی بسازه.
و الان هر بار فقط Push میکنم و خروجی macOS آماده تحویل دارم.
با توجه به این که اکثرا گفتن که به زبان فارسی برگردیم و یکم توی سبک پستهای قدیم کانال محتوا بنویسم، گفتم از یه تجربه واقعی این چند وقت براتون بگم.
چند وقتی هست کلاً سمت سختافزار نبودم و داشتم روی یه سری نرمافزار ویندوز با پایتون کار میکردم.
همه چی خوب پیش میرفت تا رسیدیم به یه مرحله مهم:
باید برای macOS هم خروجی میگرفتیم 😐
مشکل کجا بود؟
من برنامه رو با پایتون و PyInstaller نوشته بودم و برای ویندوز خیلی راحت خروجی میگرفتم:
pyinstaller --onefile main.py
ولی برای macOS یه نکته مهم وجود داره:
• معمولاً باید روی خود macOS بیلد بگیری
• یا حداقل یک محیط macOS داشته باشی
و اینجا بود که داستان جدی شد…
چون من اصلاً مک نداشتم 💀 البته یدونه مک تونستم قرض بگیرم و تست کنم ولی خب راه حل موقت بود.
راهحل: GitHub Actions
یه چیزی که خیلیها فقط برای CI/CD استفاده میکنن، ولی یه قابلیت خیلی مهم داره:
GitHub میتونه ماشین مجازی macOS بهت بده
یعنی بدون داشتن مک، میتونی روی macOS بیلد بگیری.
سناریو ما چی شد؟
میخواستیم این اتفاق بیفته:
• کد روی GitHub باشه
• با هر Push پروژه اجرا بشه
• روی macOS بیلد گرفته بشه
• خروجی PyInstaller ساخته بشه
• فایل نهایی قابل دانلود باشه
مرحله 1: ساخت Workflow
این فایل رو داخل پروژه بساز:
.github/workflows/build-macos.yml
مرحله 2: کد GitHub Actions
این هم فایل کامل:
name: Build macOS App
on:
push:
branches:
- main
jobs:
build:
runs-on: macos-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pyinstaller
- name: Build with PyInstaller
run: |
pyinstaller --windowed --onefile main.py
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: macos-build
path: dist/
خروجی چی میشه؟
بعد از هر Push:
• GitHub یک سیستم macOS مجازی بالا میاره
• Python نصب میشه
• کتابخانهها نصب میشن
• PyInstaller اجرا میشه
• فایل خروجی داخل پوشه dist ساخته میشه
• از بخش Actions قابل دانلوده
⚠️ نکته مهم
این روش برای این موارد عالیه:
• ساخت فایل اجرایی macOS
• پروژههای شخصی
• تست و بیلد اتوماتیک
ولی برای این موارد کافی نیست:
• امضای رسمی اپ (Code Signing)
• Notarization اپل
• انتشار در App Store
اونجا باید Apple Developer Account داشته باشی.
در آخر کاری که کردم خیلی ساده بود:
به جای اینکه برم مک بخرم 😄
از GitHub خواستم یه مک مجازی برام بالا بیاره و خودش برام خروجی بسازه.
و الان هر بار فقط Push میکنم و خروجی macOS آماده تحویل دارم.
❤🔥3⚡2❤1🦄1
سلام
واقعا بازار جالبی داریم یک GSM کنترلر درست کردم و اومدم ببینم توی بازار چی داریم (SIM800C مثلا) دیدم توی فروشگاه های مختلف از ماژولش گرون تره و اصلا نمیصرفه بخوام خودشو بخرم و بزارم روی برد از بازار PCB هم که نگم خیلی داغونه
اگر تازگی پروژه مشابهی داشتین که در جریان هستین چطور میشه با هزینه پایین پروژه GSM رو پیش برد مثل برند های دیگه یا هرچی لطفا برام بنویسید تا با بقیه دوستان هم به اشتراک بذاریم ببینم باید چیکار کنیم؟
با سری های Quectel آشنا هستم ولی مسئله قیمت برام مهم تره الان توی این پروژه!
@Alixahedi
واقعا بازار جالبی داریم یک GSM کنترلر درست کردم و اومدم ببینم توی بازار چی داریم (SIM800C مثلا) دیدم توی فروشگاه های مختلف از ماژولش گرون تره و اصلا نمیصرفه بخوام خودشو بخرم و بزارم روی برد از بازار PCB هم که نگم خیلی داغونه
اگر تازگی پروژه مشابهی داشتین که در جریان هستین چطور میشه با هزینه پایین پروژه GSM رو پیش برد مثل برند های دیگه یا هرچی لطفا برام بنویسید تا با بقیه دوستان هم به اشتراک بذاریم ببینم باید چیکار کنیم؟
با سری های Quectel آشنا هستم ولی مسئله قیمت برام مهم تره الان توی این پروژه!
@Alixahedi
👍3❤2😱1😭1🦄1
سلام
یه نکته کوتاه برای کسایی که PCB طراحی میکنن.
اگه یه موقع قیمت براتون مهمتر شد و خواستید بردتون رو بدید فدک چاپ کنه، با توجه به قیمتهایی که الان دارن، به نظرم گزینه قابل قبولی هست.
فقط یه نکته مهم: وایا استیچینگ (Via Stitching) رو روی بردتون انجام ندید و اگه لازم بود دستی اضافهشون کنید. ظاهراً موقع تبدیل فایلها توی آلتیومشون این وایاها درست منتقل نمیشن و ممکنه برد خراب به دستتون برسه.
این اتفاق برای خود من افتاد، البته خوشبختانه قبول کردن که بردها رو دوباره چاپ کنن.
یه نکته کوتاه برای کسایی که PCB طراحی میکنن.
اگه یه موقع قیمت براتون مهمتر شد و خواستید بردتون رو بدید فدک چاپ کنه، با توجه به قیمتهایی که الان دارن، به نظرم گزینه قابل قبولی هست.
فقط یه نکته مهم: وایا استیچینگ (Via Stitching) رو روی بردتون انجام ندید و اگه لازم بود دستی اضافهشون کنید. ظاهراً موقع تبدیل فایلها توی آلتیومشون این وایاها درست منتقل نمیشن و ممکنه برد خراب به دستتون برسه.
این اتفاق برای خود من افتاد، البته خوشبختانه قبول کردن که بردها رو دوباره چاپ کنن.
❤🔥3🤣2🦄1