شش راه آسان برای اتصال آردوینو به اندروید. آردوینو را از طریق گوشی خود کنترل کنید
از نو شروع کن
تراشه ESP 8266
تراشه ESP8266 به طور خاص برای اینترنت اشیا طراحی شده است. دو گزینه برای استفاده از این تراشه وجود دارد. اولین مورد به عنوان یک پل UART-WIFI برای اتصال به میکروکنترلر و کنترل دستورات AT است. گزینه دوم - تراشه خود نقش یک کنترل کننده را بازی می کند. طبق برآورد من، در بین دوستداران الکترونیک، تراشه بیشتر به عنوان یک کنترل کننده استفاده می شود.
ویژگی های تراشه:
- پشتیبانی از 802.11b/g/n
- MCU یکپارچه 32 بیتی کم مصرف
- ADC 10 بیتی یکپارچه
- پشته TCP/IP تعبیه شده
- تقویت کننده سیگنال RF داخلی
- پشتیبانی از تنوع آنتن
- WiFi 2.4 گیگاهرتز، پشتیبانی از WPA/WPA2
- از حالت های STA/AP/STA+AP پشتیبانی کنید
- SDIO 2.0، (H) SPI، UART، I2C، I2S، کنترل از راه دور IR، PWM، GPIO
- STBC، 1x1 MIMO، 2x1 MIMO
- A-MPDU & A-MSDU تجمع و فاصله نگهبانی 0.4 ثانیه
- توان خروجی+20 dBm در حالت 802.11b
تراشه یک راه حل WiFi بسیار یکپارچه است. هر چیزی که نیاز بود در داخل تراشه قرار داده شد. یک مدار معمولی و حداقل مورد نیاز برای یک ریزمدار فقط از هفت عنصر تشکیل شده است.
عکس برای مقایسه تعداد اجزای راه حل های مشابه.
بر اساس برخی گزارش ها، تمام این زیبایی توسط هسته پردازنده 32 بیتی Xtensa LX106 کنترل می شود، به گفته برخی دیگر - الماس L106 Tensilica. در زیر میکروسکوپ، تراشه مانند یک شهر کامل از عناصر متصل به نظر می رسد.
یکی از مهمترین ویژگی ها مصرف برق است. در ESP8266، به سادگی شگفت انگیز است:
- 215 میلی آمپر در حالت انتقال پیوسته.
- 1 میلی آمپر در حالت حفظ ارتباط با نقطه دسترسی
- 10uA در حالت خواب عمیق با ساعت در حال اجرا
- 0.5uA اینچ حالت قدرتخاموش
زمان لازم برای بیدار شدن و شروع ارسال یک بسته کمتر از 2 میلی ثانیه است. به عنوان مثال، هنگام اندازه گیری دما هر 100 ثانیه و اتصال به یک نقطه دسترسی و انتقال داده های انباشته شده در هر 300 ثانیه (بقیه زمان خواب تراشه)، جریان متوسط حدود 1 میلی آمپر خواهد بود. این بیش از سه ماه کار از سه باتری انگشتی با ظرفیت 2600 میلی آمپر ساعت است.
درباره ماژول ها ESP
در حال حاضر، محبوب ترین ماژول های مبتنی بر ESP8266 عبارتند از ESP-01، ESP-02، ESP-03، ESP-04، ESP-05، ESP-06، ESP-07، ESP-08، ESP-09، ESP-10، ESP. -11، ESP-12، ESP-12E. آنها از نظر تعداد پین های جدا شده، وجود کانکتور برای اتصال آنتن خارجی و اندازه متفاوت هستند.
اکنون می توانید برادر بزرگتر ESP8266 را در فروش پیدا کنید - این ماژول ESP-32 است. در Aliexpress، تاکنون تنها دو فروشنده این ماژول ها را دارند. قیمت حدود 250 روبل در برابر 110 روبل برای ESP-12E است. در ماژول جدید چیزهای بیشتری وجود خواهد داشت.
ویژگی های اصلی ESP-32. (برای مشاهده کلیک کنید)
وای فای
- 802.11b/g/n/e/i
- 802.11n (2.4 گیگاهرتز)، تا 150 مگابیت بر ثانیه
- ویژگی های امنیتی 802.11i: پیش احراز هویت و TSN
- 802.11e: مدیریت صف های متعدد برای استفاده کامل از اولویت بندی ترافیک QoS
- دسترسی محافظت شده از Wi-Fi (WPA)/WPA2
- راه اندازی محافظت شده از Wi-Fi (WPS)
- سازگار و دارای گواهینامه UMA
- تنوع و انتخاب آنتن
- تجمع A-MPDU و A-MSDU
- قدرت WMM و U-APSD
- تکه تکه شدن و یکپارچه سازی
- Wi-Fi Direct (P2P)، P2P Discovery، حالت مالک گروه P2P و مدیریت انرژی P2P
- حالت ایستگاه BSS زیرساخت / حالت Soft AP
- نظارت / اسکن خودکار چراغ
- پشته های SSL با شتاب دهنده های سخت افزاری
بلوتوث
- رادیو و بیس باند کاملاً یکپارچه تک تراشه CMOS
- بلوتوث Piconet و Scatternet
- بلوتوث 4.2 (BR/EDR/BLE)
- پرش فرکانس تطبیقی (AFH)
- SMP
- فرستنده کلاس 1، کلاس 2 و کلاس 3 بدون تقویت کننده قدرت خارجی
- قدرت تراشی +10dBm
- گیرنده NZIF با حساسیت -90 dBm
- حداکثر سرعت 4 مگابیت در ثانیه UART HCI
- SDIO / SPI HCI
- CVSD و SBC
- مصرف برق کم
- حداقل جزء خارجی
CPU و حافظه
- Xtensa® Dual-Core 32 بیتی LX6 میکروفون، تا 400MIPS
- رام 128 کیلوبایت
- QSPI Flash/SRAM، تا 4 x 16 مگابایت
- منبع تغذیه: 2.5 ولت تا 3.6 ولت
- 416 کیلوبایت SRAM
ساعت و تایمر
- نوسانگر کریستالی 2 مگاهرتز تا 40 مگاهرتز
- نوسان ساز داخلی 8 مگاهرتز با کالیبراسیون
- نوسان ساز خارجی 32 کیلوهرتز برای RTC با کالیبراسیون
- نوسان ساز داخلی RC با کالیبراسیون
- دو گروه تایمر شامل 3 تایمر 64 بیتی و 1 x نگهبان در هر گروه
- تایمر RTC با دقت زیر ثانیه
- نگهبان RTC
رابط های جانبی پیشرفته
- 12 بیت SAR ADC تا 16 کانال
- 2 مبدل D/A 10 بیتی
- 10 سنسور لمسی
- سنسور دما (-40 + 125 درجه سانتیگراد)
- 4 x SPI
- 2 x I2S
- 2 x I2C
- 2 x UART
- 1 میزبان (SD/eMMC/SDIO)
- 1 برده (SDIO/SPI)
- رابط MAC اترنت با پشتیبانی اختصاصی DMA و IEEE 1588
- CAN 2.0
- IR (TX/RX)
- موتور PWM
- LED PWM تا 16 کانال
امنیت
- ویژگی های امنیتی استاندارد IEEE 802.11 همه پشتیبانی می شوند، از جمله WFA، WPA/WPA2 و WAPI
- بوت ایمن
- رمزگذاری فلش
- 1024 بیت OTP، تا 768 بیت برای مشتریان
- شتاب سخت افزار رمزنگاری:
- AES 128/192/256
- کتابخانه HASH (SHA-2).
-RSA
- مولد اعداد رادم
پشتیبانی اعلام شده برای اتوبوس CAN مورد توجه خاص است. به زودی امکان مدیریت سیستم های خودرو و انجام عیب یابی از طریق وای فای به طور مستقیم از آن وجود خواهد داشت دستگاه موبایل.
اما به ESP-12E برگردیم. بر اساس این ماژول، پلتفرم NodeMCU ساخته شده است.
درباره پلت فرم
این پلتفرم از قابلیت های ماژول ESP-12 استفاده می کند، میکروکنترلر خود را ندارد. چینی ها کلون های زیادی را با مبدل های رابط مختلف تولید می کنند و خود پلتفرم ها اندازه های مختلفی دارند.
به طور پیشفرض، میانافزار NodeMCU با پشتیبانی از مفسر زبان برنامهنویسی LUA در پلتفرم بارگذاری میشود. اسکریپت ها رفتار هیئت مدیره را تعریف می کنند.
من برنامه ها را با استفاده از Arduino IDE می نویسم و آپلود می کنم. برای کار با پلتفرم باید کتابخانه ها نصب شوند. همراه با کتابخانه ها تعداد زیادی ازنمونه های برنامه
نصب کتابخانه بر روی محیط زیست آردوینو IDE برای کار با NodeMCU .
برای نصب کتابخانه ها، به تنظیمات آردوینو IDE و در قسمت «تابلو اضافی» آدرس http://arduino.esp8266.com/package_esp8266com_index.json را وارد کنید
لیست را به پایین اسکرول کنید و ESP8266 توسط ESP8266 Community را پیدا کنید و کتابخانه ها را نصب کنید.
بستن مدیر هیئت ها به "Tools" بروید و برد NodeMCU را مطابق نسخه خود انتخاب کنید.
برای اینکه بفهمید کدام ماژول را نصب کرده اید و کدام نسخه را انتخاب کنید، به ماژول نگاه کنید. اگر مخاطبین روی آن در سه طرف قرار دارند - این ESP-12E است، اگر فقط در دو طرف باشد - این ESP-12 است.
پین تخصیص پلتفرم NodeMCU
توابع پشتیبانی شده توسط کتابخانه ها برای آردوینو IDE .
توضیحات کامل را می توانید در اینجا https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_ru و به زبان روسی بخوانید. من در مورد توابع اصلی صحبت خواهم کرد.
GPIO مانند آردوینو کنترل می شود. عملکرد pinMode، digitalRead، digitalWrite، analogWrite طبق معمول. analogRead(A0) مقدار ADC را به ترتیب از ورودی آنالوگ A0 می خواند. analogWrite نرم افزار PWM را فعال می کند. فرکانس PWM حدود 1 کیلوهرتز است. محدوده PWM از 0 تا 1023 است، همانطور که به یاد داریم برای آردوینو تا 255 است. وقفه ها نیز در هر GPIO به جز GPIO16 پشتیبانی می شوند. توابع millis() و micros() میلی ثانیه و میکروثانیه را از زمان شروع ماژول برمی گرداند. تابع delay() NodeMCU متفاوت از آردوینو کار می کند. در اینجا استفاده از تاخیر مورد استقبال و حتی در برنامه های بزرگ ضروری است. هنگامی که یک ماژول اتصال WiFi را حفظ می کند، باید کارهای پس زمینه زیادی غیر از طرح شما انجام دهد. توابع WiFi و TCP/IP کتابخانههای SDK این توانایی را دارند که تمام رویدادهای موجود در صف را پس از تکمیل هر چرخه تابع ()loop شما یا در طول اجرای تاخیر (...) پردازش کنند. اگر کد شما دارای قطعاتی است که بیش از 50 میلی ثانیه طول می کشد، باید از تاخیر (...) استفاده کنید تا پشته WiFi به درستی کار کند. اما ()delayMicroseconds سایر وظایف را مسدود می کند و برای تاخیرهای بیشتر از 20 میلی ثانیه توصیه نمی شود. سریال از یک سخت افزار UART0 استفاده می کند که روی PIO1 (TX) و GPIO3 (RX) اجرا می شود.
برنامه ای برای کنترل چهار رله از یک برنامه تلفن همراه
پس از نصب کتابخانه ها، یک بلوک از 4 رله را به پلتفرم به پایه های D1، D2، D3، D4 متصل می کنیم که به ترتیب مربوط به GPIO 5، 4، 0، 2 است. سپس برق را به پلت فرم و به واحد رله وصل می کنیم. بلوک رله ای که من دارم یک ویژگی دارد. برای روشن کردن رله، باید پین را روی زمین بکشید. یعنی 0 منطقی رله را روشن می کند و 1 آن را خاموش می کند.
من سه گزینه را برای برنامه کنترل بلوک رله در نظر خواهم گرفت.
برنامه اول از کتابخانه محبوب aRest https://github.com/marcoschwartz/aREST استفاده می کند
این یک کتابخانه کنترل کننده API است که به شما امکان می دهد GPIO را از طریق درخواست های http مانند http://192.168.0.10/digital/6/1 کنترل کنید. قابلیت های آن: GPIO را روی دیجیتال یا آنالوگ (PWM) تنظیم کنید، 0 یا 1 را برای پین کردن در دیجیتال تنظیم کنید. حالت، متغیرها را برگردانید و وضعیت پین ها را بخوانید.
من برنامه را کامپایل کردم و از نمونه هایی که با کتابخانه ارائه می شود بارگذاری کردم. از نظر استفاده، نمی تواند ساده تر باشد.
در راه اندازی، یک اتصال با یک نقطه دسترسی برقرار می شود که از طریق آن گزارش می شود پورت COM. و حلقه شبیه به این است:
حلقه خالی() (
WiFiClient client = server.available();
اگر (! مشتری) (
برگشت؛
}
while(!client.available())(
تاخیر (1);
}
دسته استراحت (مشتری)؛
}
همه. آنچه در آنجا اتفاق می افتد مشخص نیست. این کار می کند، اما ما در واقع چیزی را برنامه ریزی نمی کنیم. ما فقط برنامه را اجرا می کنیم، کتابخانه بقیه کارها را انجام می دهد. اما جالب تر است که یاد بگیرید چگونه با GPIO کار کنید "با دست". بله اتفاقا برنامه من بعد از مدت نامحدودی از کار افتاد. گاهی بعد از 40 دقیقه، گاهی بعد از 5-6 ساعت. بعد از 8 ساعت کار به خانه آمدم، همیشه متوجه می شدم که این برنامه کار نمی کند. روتر این را نشان می دهد مشتری وای فایمتصل شده و یک آدرس IP داده شده است. من به سرعت علاقه به کتابخانه را از دست دادم. من هیچ شکایتی در مورد مسدود شدن aRest در انجمن های روسی زبان ندیده ام. من قبلاً در NodeMCU یا منبع تغذیه ناپایدار گناه کرده بودم، اما آزمایشات بیشتر ثابت کرد که برنامه در مورد من مقصر بوده است. به احتمال زیاد دارم مورد خاص. من ادعا نمی کنم که کتابخانه کار نمی کند.
ما aRest را فهمیدیم.
برنامه دوم
خود نوشته، فقط از یک #کتابخانه شامل استفاده می کند
پس از کامپایل و آپلود برنامه در مانیتور پورت سریال، برنامه وضعیت اتصال و آدرس IP را که پلتفرم از نقطه دسترسی دریافت می کند گزارش می دهد.
برای کنترل واحد رله برای این دو برنامه، اپلیکیشنی برای تلفن همراه با سیستم عامل اندروید ایجاد شد. برنامه بسیار ساده است، در App Inventor 2 ایجاد شده است. در ادامه روند ایجاد برنامه را شرح خواهم داد. اول، گزینه سوم برای حل کنترل رله.
گزینه سوم مجتمع سیستم عامل پلت فرم و نرم افزار اندروید از یک توسعه دهنده. من از سرویس Blynk استفاده کردم. این یک سرویس ابری برای ایجاد کنترل پنل های گرافیکی است و برای طیف گسترده ای از میکرو کامپیوترها و میکروکنترلرها مناسب است.
برای ایجاد پروژه خود که از طریق Blynk مدیریت می شود، به مقدار کمی نیاز دارید: برنامه را نصب کنید (نسخه های iOS و Android موجود است) یا از فرم وب استفاده کنید. در اینجا باید در یک مرحله ثبت نام کنید - ایمیل و رمز عبور خود را وارد کنید. واقعیت این است که Blynk یک راه حل ابری است و هر کاربری می تواند بدون ثبت نام بر روی قطعه آهن کنترل داشته باشد.
کسانی که مایلند می توانند سرور را به صورت محلی نصب کنند. در این حالت نیازی به دسترسی به اینترنت نیست.
من روند را شرح خواهم داد. از دو بخش تشکیل شده است.
قسمت اول. Blynk را دانلود کنید گوگل پلی. برنامه را نصب و اجرا کنید
- روی "ایجاد پروژه جدید" کلیک کنید
- نام پروژه را وارد کرده و NodeMCU را در قسمت "مدل سخت افزار" انتخاب کنید. Auth Token را از زبان بیاموزید یا آن را روی یک کاغذ یادداشت کنید، آن را به ایمیل خود ارسال کنید. روی "ایجاد" کلیک کنید.
- روی "+" در گوشه کلیک کنید.
- "دکمه" را انتخاب کنید. همانطور که قبلاً اشاره کردید، هر عنصر اضافه شده به پروژه هزینه انرژی دارد. به طور پیش فرض، 2000 به شما داده می شود. با اضافه کردن ویجت، انرژی مصرف می شود. اگر نیاز به قرار دادن ویجت های بیشتری دارید، باید انرژی را در ازای پول بخرید.
- دکمه ما اینجاست. روی آن کلیک کنید. تنظیمات آن باز خواهد شد.
- نام، پینی که روی آن عمل می کند، حالت دکمه یا سوئیچ، نام حالت های "روشن" و "خاموش" را انتخاب کنید. در برنامه، سیگنال از دکمه نمی تواند معکوس شود. برای رله های من: دکمه خاموش است - 0 در خروجی، رله روشن است و بالعکس. با نصب سرور بر روی رایانه محلی می توانید قوانین عملکرد منطق را تجویز کنید.
- سپس روی مثلث بالا سمت راست کلیک کنید. برنامه از حالت ویرایش به حالت کار تغییر می کند.
- دکمه ها کار می کنند. قابل توجه است، چند لمسی پشتیبانی می شود. من سعی کردم 6 دکمه را همزمان فشار دهم. همه چیز کار می کند (تلفن طبق توضیحات 10 نقطه فشار دارد).
بخش دوم سیستم عامل NodeMCU است. کتابخانه های Blynk را دانلود و نصب کنید https://github.com/blynkkk/blynk-library. Arduino IDE - File - Samples - Blynk - BoardsAndShields - ESP8266_Standalone را اجرا کنید.
رمز تأیید را از قسمت مخفی ایمیل در مثال وارد کنید. و همچنین SSID شبکه وای فای و رمز ورود به آن.
همه. جمع آوری و دوخت. همه چیز برای اولین بار کار کرد. مشمول استفاده سرویس ابریباید به اینترنت دسترسی داشته باشد تلفن همراهو NodeMCU.
ایجاد یک برنامه کاربردی دربرنامه فهرست.
App Inventor یک محیط توسعه بصری برای برنامه های اندرویدی است که کاربر را ملزم می کند حداقل دانشبرنامه نويسي. در ابتدا در آزمایشگاه گوگل توسعه داده شد، پس از تعطیلی این آزمایشگاه، به موسسه فناوری ماساچوست منتقل شد. برای برنامه نویسی در App Inventor، استفاده کنید رابط کاربری گرافیکی، یک زبان برنامه نویسی بصری بسیار شبیه به Scratch و StarLogo TNG. فهمیدن نحوه نوشتن برنامه کار چندان سختی نیست. من هیچ سند مفیدی به زبان روسی پیدا نکردم، اما ویدیوهای زیادی در یوتیوب وجود دارد.
این سرویس دارای دو تب اصلی است. اولین مورد "طراح" است، اینجا در ویرایشگر بصریاجزا قرار داده شده است. سرعت توسعه رابط به دلیل یکی از ویژگی های سرویس App Inventor بسیار بالا است. در یک دستگاه تلفن همراه، باید برنامه MIT App Inventor 2 Companion را نصب کنید. آن را اجرا کنید. در سایت، Connect - AI Companion را انتخاب کنید. یک کد QR تولید و روی صفحه نمایش داده می شود. در برنامه، باید روی "اسکن کد QR" کلیک کنید و کد را اسکن کنید. پس از چند ثانیه، برنامه بر روی صفحه نمایش دستگاه تلفن همراه ظاهر می شود. موارد جدید یا هر داده تغییر یافته فقط در یک ثانیه برای تأیید در دستگاه تلفن همراه در دسترس میشوند.
صفحه شامل: یک فیلد ورودی برای وارد کردن آدرس IP، یک دکمه برای تنظیم آدرس و ارسال درخواست آزمایشی است. در زیر کامپوننت "WebViewer" آمده است، صفحه ارسال شده در پاسخ از NodeMCU را نمایش می دهد. در زیر 4 گروه از دو دکمه وجود دارد که رله را روشن و خاموش می کنند. ما همچنین به کامپوننت TinyDB نیاز داریم، برای ساخت پرس و جو یک متغیر در آن ذخیره می کنیم. من همچنین یک جزء تشخیص صدا را برای آزمایش اضافه کردم تا بتوانید رله را با دستورات صوتی کنترل کنید. من الگوریتم اقدامات برای تشخیص متن را توصیف نمی کنم، زیرا استفاده از این تابع بسیار ناخوشایند است. ابتدا باید دکمه را فشار دهید، سپس پنجره ای از Google با کتیبه "speak" نمایش داده می شود، سپس دستور تلفظ می شود. علاوه بر این، پس از پایان تلفظ دستور، سیستم تشخیص مدتی صبر می کند، سپس متوجه می شود که همه چیز قبلا گفته شده است. سپس تشخیص گفتار و پاسخ متن می آید. باید با عبارات از پیش آماده شده مقایسه شود. و تنها پس از آن دستور اجرا خواهد شد. زدن دکمه راحت تر است.
تب دوم "Blocks" نام دارد. در اینجا، به صورت بلوک، کل بخش "نرم افزار" برنامه مشخص می شود.
در اینجا، الگوریتم برنامه از بلوک ها تشکیل شده است. بخش اصلی الگوریتم روی صفحه است. آنچه در اینجا اتفاق می افتد را شرح خواهم داد.
- هنگامی که SET.Click - هنگامی که دکمه "set" فشار داده می شود، تابع IP را فراخوانی کنید
- بعد خود تابع IP می آید. آدرس IP را از فیلد ورودی در TinyDB با پیشوند "http://" ذخیره می کند. سپس WebViewer.GoToUrl آدرس را از TinyDB می گیرد، "/test" را به انتها اضافه می کند و به این آدرس می رود. من "http://192.168.0.1/test" را دریافت می کنم. در WebViewer اطلاعاتی بر روی صفحه نمایش بارگذاری می شود که تست آن را پشت سر گذاشته است و زمان کار مداوم NodeMCU نمایش داده می شود. اگر آدرس IP اشتباه وارد شده باشد، پیامی مبنی بر عدم امکان باز کردن صفحه دریافت می کنیم.
- وقتی ON1.Click (ON1 نام دکمه است) عملکرد ON1 را فراخوانی می کند.
- تابع ON1 آدرس را از TinyDB می گیرد، "/D1/0" را به آن اضافه می کند، "http://192.168.0.1/D1/0" را نشان می دهد و درخواست را ارسال می کند. NodeMCU، با دریافت درخواست داده شده، فکر می کند که پین D1 باید روی 0 تنظیم شود. پاسخ "GPIO set OK" را که در WebViewer می بینیم را اجرا و ارسال می کند.
- دکمه OFF1 بعدی نیز همین کار را می کند، فقط "/D1/1" را در پایان اضافه می کند. منطق 1 را روی پین D1 قرار می دهد. رله خاموش می شود.
دکمه های باقیمانده به همین ترتیب عمل می کنند و شماره پین ها و وضعیت مورد نیاز در درخواست را تغییر می دهند.
بعد از اینکه همه چیز بررسی شد و کار کرد، روی Build - App کلیک کنید (apk. را در رایانه من ذخیره کنید). کامپایل و دانلود فایل apk اپلیکیشن. این باید روی یک دستگاه تلفن همراه نصب شود، که قبلاً اجازه نصب برنامه ها را داده است منابع شخص ثالث. اکنون برنامه به خودی خود شروع می شود. دیگر نیازی به AI Companion و اتصال به اینترنت نیست.
به این صورت است که می توانید بدون زحمت یک برنامه کاربردی برای دستگاه اندرویدی خود ایجاد کنید تا بار روی شبکه WiFi را مدیریت کنید.
NodeMCU و تلفن همراه متصل به روتر خانگی. جایی که نقطه ای وجود ندارد دسترسی به وای فای NodeMCU می تواند به عنوان یک نقطه دسترسی برای اتصال مستقیم دستگاه تلفن همراه به ESP8266 عمل کند. به عنوان مثال، کنترل باز شدن درب گاراژ و روشن کردن چراغ در گاراژ.
P.S. من هنوز نتوانسته ام نقطه دسترسی را روی پلت فرم بالا ببرم. مثالی که با کتابخانه ها ارائه می شود کامپایل نمی شود. Arduino IDE فقط هنگام کامپایل هنگ می کند. من هنوز با این موضوع کنار نیامده ام.
P.P.S. یک نقطه در پلت فرم مطرح کرد، اما هنوز به کار کافی دست نیافته است. دستورات یا با تاخیری چند ثانیه ای اجرا می شد یا اصلا اجرا نمی شد. در حالی که مطالعه ماژول به حالت تعلیق درآمده است. سرویس ماشین پرمشغله
آیا ماشین RC می تواند ماشین وای فای باشد...؟
ماشینهای RC خوب هستند، اما ماشینهای RC ارزان برد محدودی دارند و فقط با ریموت خاصی که با کیت ارائه میشود کنترل میشوند.
من یک جیپ 4x4 RC با سیستم تعلیق انعطاف پذیر و لاستیک های خارج از جاده را به قیمت حدود 30 دلار خریدم. پس از بازی با دستگاه، به این نتیجه رسیدم که می توان آن را با Wi-Fi و Android بهبود بخشید. بعد از صرف زمان کمی برد را به طور کامل از دستگاه جدا کردم. من ولتاژهای این برد را اندازه گرفتم و یک سیستم کنترل موتور با آن توسعه دادم کمک آردوینو. سیستم کنترل اصلی از PWM برای کنترل سرعت استفاده نمی کند. این ماشین برای حرکت از روی موانع با دنده بسیار کم و در نتیجه بسیار آهسته طراحی شده است. مدار من از PWM استفاده می کند.
من چند ماهه که از آردوینو استفاده میکنم. من همچنین Asynclabs WiFi Sheild را برای Duemilanoe Arduino خریداری کردم تا با WiFi آزمایش کنم. با یک کتابخانه نصب شده در Arduino IDE ارائه می شود. من توانستم برنامه ای بسازم که به شما امکان می دهد موتورها و جهت حرکت را با استفاده از WiFi کنترل کنید.
با کمک استودیوی تصویریمن یک پنجره برنامه ساخته ام که به سرور ماشین متصل می شود و به آن دستور می دهد. سپس بعد از چندین بار تلاش، یک برنامه اندرویدی نوشتم که از شتاب سنج برای کنترل ماشین استفاده می کند.
ابزار و عناصر
این لیست مشترکابزار و عناصری که در این پروژه استفاده شده است. مستندات Eagle دقیق را مشخص می کند مشخصات فنیاجزای مورد استفاده
مولتی متر
آهن لحیم کاری
لحیم کاری
پیچ گوشتی
راه حل برای اچینگ برد مدار
فایبرگلاس فویل
انبر
آردوینو
AsyncLabs WiFi Shield
کانکتورهای RJ45
راننده موتور پل H
خازن ها
راننده موتور
با استفاده از Eagle این مدار را طراحی و ساختم تخته مدار چاپیبرای او. این به عنوان یک درایور موتور و تنظیم کننده قدرت برای آردوینو عمل می کند.
این به شما امکان می دهد از یک باتری استاندارد 7.2 ولتی برای تغذیه موتورهای اصلی و فرمان و آردوینو استفاده کنید.
این مدار از یک درایور پل H یکپارچه دوگانه SN754410 برای کنترل موتورها استفاده می کند. پین های کنترل درایور به کابل RJ45 متصل می شوند که به AsyncLabs WiFi Sheild متصل می شود.
سپر آردوینو
با استفاده از کتابخانه SparkFun در Eagle، من یک آردوینو شیلد طراحی کردم که پین ها را به WiFi Shield منتقل می کند و از طریق یک کانکتور RJ45 و 2 ترمینال پیچ به درایور موتور متصل می شود.
پین اوت RJ45 بسیار مهم است. یک خطای اتصال می تواند منجر به نتایج غیرقابل پیش بینی شود و شما باید برد را دوباره انجام دهید.
حکاکی PCB
بارها به این موضوع پرداخته شده است و من آن را به تفصیل توضیح نمی دهم.
من از آن استفاده می کنم و مناسب من است و با تجربه نتایج عالی می دهد.
از نوار چسب برای بستن تخته به قاب استفاده شد. من خوش شانس بودم چون در ماشین تحریر من فضای زیادی برای وسایل الکترونیکی زیر قاب لوله ای وجود داشت.
یادم رفت از اتصال برد درایور موتور به بقیه بردها عکس بگیرم اما خوب شد و جای زیادی را در کیس اشغال نکرد.
برنامه
ممکن است کد من به اندازه کافی کارآمد نباشد، اما کار می کند.
ماشین تحریر
من توانستم CarServer را بر اساس مثال SocketServer که از Wifi Sheild AsynLabs دریافت کردم بسازم.
شما باید اطلاعات شبکه بی سیم خود را در کد آردوینو وارد کنید. هنگامی که دستگاه روشن است، 15-45 ثانیه به آن فرصت دهید تا با روتر ارتباط برقرار کند. LED قرمز روی WiFi Shield به معنای برقراری ارتباط است.
من این برنامه را با سی شارپ و MS Visual Studio 2008 ساختم. یک پنجره زیبا درست کردم و ماشین را می توان با فلش کنترل کرد.
چرا ماشین را از طریق گوشی خود کنترل نمی کنید؟
این فکر حدود یک هفته پس از خرید DroidX به ذهنم خطور کرد. من شروع به آزمایش کردم و در نهایت از Android SDK استفاده کردم. من برنامه های مشابهی پیدا کردم که از شتاب سنج برای کنترل استفاده می شود. با نگاه کردن به این برنامه ها، من خودم نوشتم.
IP و پورت مشخص شده در کد آردوینو را پیست کنید. گوشی خود را به صورت افقی نگه دارید. سپس برای رانندگی به جلو آن را از خود دور کنید و برای رانندگی به سمت عقب آن را به سمت خود متمایل کنید. از گوشی خود به عنوان فرمان استفاده کنید.
این اولین برنامه اصلی اندروید من است. هنوز هم اشکالاتی دارد، اما در بیشتر موارد به خوبی کار می کند.
با ماشین 4*4 با وای فای در حیاط رانندگی کنید!
برای ایجاد این پروژه زمان بسیار خوبی داشتم. من دانش و مهارت های جدید زیادی کسب کردم و اکنون یک ماشین 4x4 دارم که می توان آن را از طریق تلفن من کنترل کرد.
من به یک دوربین برای نصب پشت شیشه جلو نیاز دارم تا بتوانم ببینم کجا می روم. این باید کم قدرت باشد و همچنین ویدئو را به تنهایی انتقال دهد. (من فکر می کنم آردوینو می تواند آن را مدیریت کند).
فهرست عناصر رادیویی
تعیین | تایپ کنید | فرقه | تعداد | توجه داشته باشید | خرید کنید | دفترچه یادداشت من | |
---|---|---|---|---|---|---|---|
راننده موتور | |||||||
IC1 | تراشه | SN754410 | 1 | به دفترچه یادداشت | |||
تنظیم کننده خطی | 5 V | 1 | به دفترچه یادداشت | ||||
ترانزیستور دوقطبی | 2N3904 | 1 | به دفترچه یادداشت | ||||
C1، C2 | خازن الکترولیتی | 2 | به دفترچه یادداشت | ||||
رابط | 2 پین | 7 | به دفترچه یادداشت | ||||
رابط | 8 پین | 1 | به دفترچه یادداشت | ||||
سپر آردوینو | |||||||
U1 | برد آردوینو | 1 | به دفترچه یادداشت | ||||
T1 | ترانزیستور دوقطبی | 2N3904 | 1 | به دفترچه یادداشت | |||
R1 | مقاومت | 1 | به دفترچه یادداشت | ||||
3 دلار آمریکا | مقاومت تریمر | 1 | به دفترچه یادداشت | ||||
رابط | 2 پین | 2 |
میخوای بفرستی پیام متنیاز گوشی هوشمند اندرویدی گرفته تا برد آردوینو؟ این مقاله به شما می گوید که چگونه این کار را انجام دهید!
آنچه مورد نیاز خواهد بود
- گوشی هوشمند اندرویدی که از حالت میزبان USB پشتیبانی می کند (به عنوان مثال پشتیبانی OTG) - اکثر دستگاه های دارای اندروید 3.1 و بالاتر از این حالت پشتیبانی می کنند. گوشی خود را با از طریق USB Host Diagnostics App از Play Store.
- آردوینو - هر نسخه. من از Uno R3 استفاده خواهم کرد.
- کابل یو اس بیبرای آردوینو؛
- یو اس بی کابل OTG- برای اتصال کابل USB آردوینو به آن نیاز دارید پورت میکرو USBتلفن؛
- Android Studio - باید آن را نصب کنید. انجام آن بسیار آسان است. استودیو اندرویدتوسعه برنامه را از طریق مفروضات و تولید کد آسان تر می کند. این یکی از بهترین IDE ها است. شما همچنین می توانید از این مقاله به عنوان راهنما استفاده کنید نصب اندروید IDE.
اجزای اصلی یک برنامه اندروید
که در برنامه اندرویدسه فایل اصلی وجود دارد:
MainActivity.java این کد اجرایی جاوا است که نحوه عملکرد برنامه را کنترل می کند. activity_main.xml شامل طرحبندی برنامه، به عنوان مثال، اجزای: دکمهها، اجزای نمایش متن و غیره است. AndroidManifest.xml اینجاست که شما تعیین میکنید برنامه چه زمانی اجرا شود، به چه مجوزهایی نیاز دارد و به چه سختافزاری دسترسی داشته باشد.
بسیاری از فایل های دیگر وجود دارد، اما همه آنها با استفاده از این سه به یکدیگر متصل می شوند.
فعالیت را می توان به عنوان صفحه ای توصیف کرد که در آن کاربر با تلفن در تعامل است. فعالیت ها حاوی ویجت هایی مانند دکمه ها، فیلدهای متنی، تصاویر و غیره هستند که به انتقال اطلاعات کمک می کنند. این آموزش تنها از یک اکتیویتی استفاده می کند، MainActivity، که ورودی کاربر را برای ارسال آن به آردوینو و همچنین نمایش متن دریافتی می پذیرد.
چیدمان
![](https://i1.wp.com/radioprog.ru/uploads/media/articles/0001/01/ba4fd729fdb62d1c7fe3881fe3cf01cec823d96c.png)
ما از همان چیدمان برنامه USB و برنامه بلوتوث استفاده خواهیم کرد. این ساده است و حاوی حداقل ویجت های مورد نیاز برای بررسی ارتباط بین دستگاه ها است.
همانطور که می بینید، شامل یک ویجت EditText برای دریافت ورودی از کاربر، دکمه هایی برای شروع اتصال، ارسال داده، پایان دادن به اتصال و پاک کردن TextView است. داده های دریافتی در TextView (فضای خالی زیر دکمه ها) نمایش داده می شود.
در اینجا بخشی از کد XML آمده است. از آنجایی که کد دکمه ها مشابه است، در اینجا نشان داده نمی شود. کد کامل را می توانید از لینک انتهای مقاله دانلود کنید.
من در اینجا از RelativeLayout استفاده کردهام، به این معنی که هر ویجت نسبت به ویجتهای اطراف خود قرار دارد. طرح را می توان به راحتی در برگه طراحی دوباره ایجاد کرد، جایی که می توانید ویجت ها را به هر کجا که می خواهید بکشید و رها کنید. باید توضیح دهیم که با کلیک روی دکمه چه اتفاقی می افتد. برای این کار از روش onClick استفاده می شود. نام روش را در کد XML برای دکمه مشخص کنید. برای انجام این کار، خط را اضافه کنید:
Android:onClick="onClickMethod"
اکنون ماوس خود را روی این خط قرار دهید، یک هشدار باید در سمت چپ ظاهر شود که به نظر می رسد:
![](https://i2.wp.com/radioprog.ru/uploads/media/articles/0001/01/1fa492d90a452879a7128af59aa0ab36ddc859ad.png)
بر روی گزینه "Create onClick..." کلیک کنید. این به طور خودکار کد روش onClick را به MainActivity.java اضافه می کند. برای هر دکمه باید این کار را انجام دهید.
کتابخانه سریال USB
تنظیمات اتصال سریالدر اندروید بسیار پر زحمت است، زیرا به شما نیاز دارد تنظیم دستیخیلی چیزها، بنابراین چند کتابخانه پیدا کردم که همه این کارها را به صورت خودکار انجام می دهند. من تعدادی از آنها را آزمایش کردم و در نهایت روی کتابخانه UsbSerial از کاربر Github felHR85 مستقر شدم. در میان کتابخانه های مشابهی که پیدا کردم، تنها کتابخانه ای است که هنوز در حال به روز رسانی است. تنظیم و استفاده از آن بسیار آسان است. برای افزودن کتابخانه به پروژه خود، دانلود کنید آخرین نسخهفایل JAR در Github. آن را در زیر شاخه libs در فهرست پروژه خود قرار دهید. سپس در فایل اکسپلورر در اندروید استودیو، روی فایل JAR کلیک راست کرده و گزینه "Add as Library" (Add as Library) را انتخاب کنید. همین!
الگوریتم اجرای برنامه
![](https://i0.wp.com/radioprog.ru/uploads/media/articles/0001/01/c863581dfe792509722743f3d8cf3fb804cdb10e.png)
این یک طرح کلی از نحوه ادامه کار است. هر اکتیویتی دارای یک متد onCreate() است که هنگام ایجاد اکتیویتی فعال می شود. هر کدی که می خواهید در ابتدا اجرا کنید باید در داخل این متد قرار داده شود. توجه داشته باشید که خواندن از دستگاه ناهمزمان است، به این معنی که در آن کار خواهد کرد زمینه. این برای اطمینان از دریافت اطلاعات در اسرع وقت است.
باز کردن یک اتصال
ابتدا روش onClick را برای دکمه Begin تعریف می کنیم. وقتی روی آن کلیک کردید، باید همه دستگاههای متصل را جستجو کنید و سپس بررسی کنید که آیا VendorID دستگاه متصل (شناسه تأمینکننده) با VendorID آردوینو مطابقت دارد یا خیر. اگر مطابقت پیدا شد، باید از کاربر اجازه درخواست شود. هر برده دستگاه USBدارای شناسه فروشنده و شناسه محصول است که می توان از آنها برای تعیین درایورهایی که باید برای این دستگاه استفاده شود استفاده کرد. شناسه فروشنده برای هر برد آردوینو 0x2341 یا 9025 است.
فضای خالی عمومی onClickStart (نمایش) (HashMap usbDevices = usbManager.getDeviceList()؛ if (!usbDevices.isEmpty()) ( نگه داشتن بولی = درست؛ برای (مدخل Map.Entry: usbDevices.entrySet()) (دستگاه = ورودی. getValue(); int deviceVID = device.getVendorId(); if (deviceVID == 0x2341) //شناسه فروشنده آردوینو ( PendingIntent pi = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0)؛ requestPermissionger(usbManager). دستگاه، پی؛ نگه داشتن = نادرست؛ ) else (اتصال = پوچ؛ دستگاه = پوچ؛ ) اگر (! نگه داشتن) خراب شود؛ ) )
حال بیایید یک BroadcastReceiver برای دریافت پیام های پخش تعریف کنیم تا از کاربر اجازه بخواهد و همچنین شروع خودکارهنگامی که دستگاه وصل است، اتصال را برقرار کنید و در صورت قطع اتصال آن را ببندید.
// دریافت کننده پیام های پخش برای شروع و بستن خودکار اتصال سریال. خصوصی نهایی BroadcastReceiver broadcastReceiver = new BroadcastReceiver() ( @Override public void onReceive(Context context, Intent intent) ( if (intent.getAction().برابر(ACTION_USB_PERMISSION)) (قبولی اعطا شده = intent.getExtras.boleger(U). EXTRA_PERMISSION_GRANTED)؛ if (اعطا شده) (اتصال = usbManager.openDevice(device)؛ serialPort = UsbSerialDevice.createUsbSerialDevice(دستگاه، اتصال)؛ if (SerialPort != null) (اگر (serialPort.open()) (//Set serial پارامترها connections.setUiEnabled(true)؛ //فعال کردن دکمهها در UI.serialPort.setBaudRate(9600);serialPort.setDataBits(UsbSerialInterface.DATA_BITS_8);serialPort.setStopBits(UsbSerialInterface.PerialTs. . setFlowControl(UsbSerialInterface.FLOW_CONTROL_OFF)؛ serialPort.read(mCallback)؛ // tvAppend(textView,"Serial Connection Opened!\n")؛ ) other (Log.d("SERIAL", "PORT NOT OPEN")؛ ) ) else (Log.d("SERIAL"، "PORT IS NULL"); ) ) else (Log.d("SERIAL"، "PERM NOT GRANTED")؛ ) ) other if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) ( onClickStart(startButton)؛ ) other if (intent.getAction ().equals(UsbManager.ACTION_USB_DEVICE_DETACHED)) ( onClickStop(stopButton); ) ); )
اگر اولین شرط IF برآورده شد، و اگر کاربر اجازه داده است، اتصال را با دستگاهی شروع کنید که شناسه فروشنده آن با شناسه فروشنده مورد نیاز ما مطابقت دارد. همچنین، در صورت دریافت اتصال دستگاه یا قطع پخش، به صورت دستی روش های onClick را برای دکمه های Start و Stop فراخوانی کنید. SerialPort با استفاده از دستگاه و اتصال به عنوان آرگومان تعریف می شود. اگر موفقیت آمیز بود، SerialPort را باز کنید و پارامترهای مناسب را تنظیم کنید. مقادیر پارامتر برای Arduino Uno عبارتند از: 8 بیت داده، 1 بیت توقف، بدون برابری، کنترل جریان خاموش است. نرخ باود می تواند 300، 600، 1200، 2400، 4800، 9600، 14400، 19200، 28800، 38400، 57600 یا 115200 bps باشد، اما ما از 9600 bps استاندارد استفاده خواهیم کرد.
دریافت اطلاعات از دستگاه
در قطعه کد بالا، به خط حاوی serialPort.read(mCallback) توجه کنید. در اینجا، تابع خواندن یک مرجع به آبجکت Callback ارسال میشود، که وقتی با دادههای ورودی مواجه میشود، به طور خودکار فعال میشود.
UsbSerialInterface.UsbReadCallback mCallback = جدید UsbSerialInterface.UsbReadCallback() ( // متد برگشتی فراخوانی را تعریف کنید که هنگام دریافت داده فراخوانی می شود. "UTF-8"); data.concat("/n"); tvAppend(textView، data); ) catch (UnsupportedEncodingException e) (e.printStackTrace(); ) ) );
داده های دریافتی به صورت بایت خام خواهد بود. ما باید آنها را دوباره رمزگذاری کنیم قالب قابل خواندنبه عنوان مثال UTF-8. سپس با استفاده از روش tvAppend() ویژه به TextView اضافه می شوند. این کار به این صورت انجام می شود زیرا هر تغییری در رابط کاربری فقط روی thread قابل انجام است. رابط کاربری. از آنجایی که این Callback به عنوان یک رشته پسزمینه اجرا میشود، نمیتواند مستقیماً بر رابط کاربری تأثیر بگذارد.
Private void tvAppend(TextView tv, CharSequence text) ( final TextView ftv = tv; final CharSequence ftext = text; runOnUiThread(new Runnable() ( @Override public void run() ( ftv.append(ftext); ));
انتقال داده به دستگاه
انتقال داده ها در مقایسه با خواندن داده ها از یک دستگاه نسبتاً آسان است. این یک فراخوانی تابع ساده با بایت های داده است که باید به عنوان آرگومان ارسال شوند. این در روش onClick دکمه Send پیاده سازی خواهد شد.
SerialPort.write(string.getBytes());
بستن یک اتصال
برای بستن اتصال کافی است پورت سریال را ببندید.
SerialPort.close();
مانیفست برنامه
مانیفست اعلام می کند که یک برنامه به چه مجوزهای اضافی ممکن است نیاز داشته باشد. تنها مجوزی که به آن نیاز داریم مجوز تبدیل تلفن به میزبان USB است. خط زیر را به مانیفست خود اضافه کنید:
می توان با افزودن یک فیلتر قصد به MainActivity، برنامه را به طور خودکار شروع کرد. این فیلتر هدف زمانی که دستگاه جدیدی متصل می شود فعال می شود. نوع دستگاه را می توان به صراحت با استفاده از شناسه فروشنده و/یا شناسه محصول در فایل XML مشخص کرد.
به خط " android:resource="@xml/device_filter " توجه کنید. این خط به کامپایلر می گوید که می تواند ویژگی های دستگاه را در فایلی به نام device_filter در دایرکتوری src/main/res/xml بیابد، بنابراین یک زیر شاخه "xml" در دایرکتوری src /main/res و فایلی با محتوای زیر در آن قرار دهید:
تست اپلیکیشن
برنامه را بسازید و آن را روی گوشی هوشمند خود اجرا کنید. حالا آردوینو IDE را روشن کنید و آردوینو را طوری تنظیم کنید که به سادگی هر چیزی را که برد روی پورت سریال دریافت میکند بازتاب دهد. در اینجا یک کد بسیار ساده برای کمک به شما در انجام این کار وجود دارد:
void setup() ( Serial.begin(9600); ) void loop() (char c; if(Serial.available()) (c = Serial.read(); Serial.print(c); ))
اکنون آردوینو خود را با استفاده از کابل OTG به پورت microUSB گوشی خود وصل کنید. برنامه باید به طور خودکار شروع شود. سعی کنید مقداری متن ارسال کنید و همان داده ها برگردانده می شوند!
![](https://i2.wp.com/radioprog.ru/uploads/media/articles/0001/01/b2feb577aab2da3a577b86d03c5e6e958a05b347.png)
نتیجه
این مقاله نشان می دهد که آردوینو چگونه می تواند با گوشی هوشمند شما ارتباط برقرار کند. و امکانات استفاده از آن بی پایان است! در مواقعی که به دادهای از هر سنسوری نیاز است که در بین سنسورهای تعبیهشده در گوشی هوشمند نیست، میتوانید از هر میکروکنترلری برای خواندن دادههای این سنسور و انتقال آنها به گوشی هوشمند استفاده کنید. مقاله زیر به شما نشان می دهد که چگونه گوشی هوشمند خود را با استفاده از ماژول بلوتوث محبوب HC05 به آردوینو متصل کنید.
در این مقاله به طور کامل ایجاد یک اپلیکیشن کوچک برای سیستم عامل موبایل اندروید و طرحی برای آردوینو توضیح داده خواهد شد. Arduino Uno دارای یک سپر بی سیم با ماژول بلوتوث خواهد بود. برنامه به ماژول بلوتوث متصل می شود و دستوری ارسال می کند. به نوبه خود، طرح روی این دستور یکی از LED های متصل به آردوینو را روشن یا خاموش می کند.
ما نیاز داریم
ساخت اپلیکیشن اندروید
جای خالی
توسعه سیستم عامل اندروید در محیط توسعه ADT، Android Development Tools انجام می شود. که از پورتال توسعه دهندگان گوگل قابل دانلود است. پس از دانلود و نصب ADT، با خیال راحت آن را راه اندازی کنید. با این حال، هنوز برای شروع توسعه برنامه خیلی زود است. همچنین باید Android SDK نسخه مورد نیاز را دانلود کنید. برای انجام این کار، باید Android SDK Manager "Window → Android SDK Manager" را باز کنید. در لیست، SDK مورد نیاز خود را در ما انتخاب کنید کیس اندروید 2.3.3 (API 10). اگر تلفن وجود ندارد، 2.3.3 یا بالاتر را انتخاب کنید. و در صورت وجود نسخه ای که با نسخه سیستم عامل گوشی مطابقت داشته باشد. سپس بر روی دکمه "Install Packages" کلیک کنید تا مراحل نصب شروع شود.
پس از دانلود و نصب کامل، شروع به ساخت برنامه می کنیم. "File → New → Android Application Project" را انتخاب کنید. همانطور که در شکل نشان داده شده است، محتویات پنجره را پر کنید.
نام برنامه - نام برنامه ای که در فروشگاه Google Play نشان داده می شود. اما ما قرار نیست برنامه را آپلود کنیم، بنابراین نام برای ما اهمیت خاصی ندارد.
نام پروژه - نام پروژه در ADT.
نام بسته - شناسه برنامه. باید به صورت زیر ترکیب شود: نام سایت شما به عقب، به اضافه هر نامی از برنامه.
در لیستهای کشویی «حداقل SDK مورد نیاز»، «Target SDK»، «Compile With» نسخهای را که قبلا دانلود کردهایم انتخاب کنید. نسخههای جدیدتر SDK از تمهای گرافیکی برای برنامهها پشتیبانی میکنند، در حالی که نسخههای قدیمیتر از آن پشتیبانی نمیکنند. بنابراین، در قسمت "Theme"، "None" را انتخاب کنید. روی "بعدی" کلیک کنید.
علامت کادر «ایجاد نماد راهانداز سفارشی» را بردارید: در این مقاله، ما روی ایجاد نماد برنامه تمرکز نمیکنیم. روی "بعدی" کلیک کنید.
در پنجره ای که ظاهر می شود، می توانید نوع "Activity" را انتخاب کنید: نوع چیزی که هنگام راه اندازی برنامه روی صفحه نمایش داده می شود. ما "فعالیت خالی" را انتخاب می کنیم، به این معنی که می خواهیم همه چیز را از ابتدا شروع کنیم. روی "بعدی" کلیک کنید.
برنامه ما فقط یک فعالیت خواهد داشت، بنابراین نمی توانید چیزی را در پنجره ظاهر شده تغییر دهید. بنابراین فقط روی "پایان" کلیک کنید.
همه چیز، برنامه ما ایجاد شده است.
راه اندازی شبیه ساز
برنامه های اندروید در یک دستگاه واقعی یا اگر وجود ندارد، روی یک شبیه ساز اشکال زدایی می شوند. بیایید خودمان را پیکربندی کنیم.
برای انجام این کار، "Window → Android Virtual" را اجرا کنید مدیریت دستگاه". در پنجره ای که ظاهر می شود، روی "جدید" کلیک کنید. فیلدهای فرم ظاهر شده را پر کنید. چه تعداد و چه منابعی شبیه ساز در اختیار "تلفن" قرار می دهد به آنها بستگی دارد. مقادیر معقول را انتخاب کنید و روی OK کلیک کنید.
که در پنجره اندرویدمدیر دستگاه مجازی، روی دکمه "شروع" کلیک کنید. با این کار شبیه ساز راه اندازی می شود. راه اندازی چند دقیقه طول می کشد. پس صبور باش
در نتیجه، یک پنجره شبیه ساز شبیه به این خواهید دید:
پر کردن یک فعالیت
فعالیت - این همان چیزی است که پس از راه اندازی برنامه روی صفحه نمایش تلفن نمایش داده می شود. روی آن دو دکمه "Light the red red" و "Light the blue LED" را خواهیم داشت. بیایید آنها را اضافه کنیم. در پانل Package Explorer، res/layout/activity_main.xml را باز کنید. ظاهر آن تقریباً مانند تصویر تصویر خواهد بود.
2 دکمه «ToggleButton» را روی فرم صفحه بکشید و رها کنید. به تب "activity_main.xml" بروید و کد زیر را ببینید:
activity_main_aiutogen.xmlاین چیزی نیست جز فعالیت ما، که به صورت گرافیکی نمایش داده نمی شود، اما در قالب XML توضیح داده شده است.
بیایید نام اجزا را قابل درک تر کنیم. بیایید فیلدهای android:id را به صورت زیر تغییر دهیم.
همچنین به آنها زیرنویس اضافه می کنیم، رنگ و اندازه متن آنها را تغییر می دهیم. کد نشانه گذاری حاصل به این شکل خواهد بود.
activity_main.xmlهمین تغییرات را می توان در حالت گرافیکی با استفاده از تب Outline/Properties ایجاد کرد.
استفاده ازمایشی
ما می توانیم برنامه ای را که به تازگی ایجاد کرده ایم روی شبیه ساز اجرا کنیم. به تنظیمات راه اندازی "Run" → Run Configurations بروید، در سمت چپ روی "Android Application" کلیک کنید. یک پیکربندی جدید "New_configuration" ظاهر می شود. در قسمت سمت راست پنجره، تب "Target" را انتخاب کرده و گزینه "Launch on all compatible devices/AVD" را انتخاب کنید.
روی "Apply" و سپس "Run" کلیک کنید. برنامه در شبیه ساز اجرا خواهد شد.
می توانید دکمه ها را فشار دهید. اما هیچ اتفاقی نمی افتد، زیرا کنترل کننده های کلیک هنوز توسط ما نوشته نشده اند.
برای اجرای برنامه بر روی یک دستگاه واقعی، باید گزینه "USB debugging" را در تنظیمات آن فعال کنید و آن را به کامپیوتر متصل کنید.
در یک دستگاه واقعی، برنامه دقیقاً یکسان به نظر می رسد.
کدنویسی برای اندروید
ویرایش مانیفست
هر برنامه اندروید باید به سیستم بگوید که چه حقوقی باید اعطا کند. حقوق در فایل مانیفست موسوم به AndroidManifest.xml فهرست شده است. در آن باید این واقعیت را مشخص کنیم که می خواهیم از بلوتوث در برنامه خود استفاده کنیم. برای انجام این کار، فقط چند خط اضافه کنید:
AndroidManifest.xmlاضافه کردن کد اصلی
زمان آن فرا رسیده است که به برنامه ما جان بدهیم. فایل MainActivity.java (src → ru.amperka.arduinobtled) را باز کنید. در ابتدا حاوی کد زیر است:
بسته MainActivityAutogen.java en.amperka.arduinoobtled ; وارد کردن android.os.Bundle ; وارد کردن android.app.Activity ; وارد کردن android.view.Menu ; کلاس عمومی MainActivity فعالیت را گسترش می دهد ( @Override protected void onCreate(Bundle savedInstanceState) ( super.onCreate (savedInstanceState)؛ setContentView(R.layout .activity_main)؛ منومنو) (getMenuInflater() .inflate (R.menu .main, menu)؛ بازگشت true؛))بیایید کد را با توجه به آنچه نیاز داریم اضافه کنیم:
در صورت خاموش بودن بلوتوث را روشن می کنیم.
ما کلیک های دکمه را پردازش می کنیم
اطلاعاتی در مورد اینکه کدام دکمه فشار داده شده است را ارسال خواهیم کرد.
یک بایت با یک عدد دو رقمی به آردوینو ارسال می کنیم. رقم اول شماره، شماره پینی است که این یا آن LED به آن متصل است، دومی وضعیت LED است: 1 - روشن، 0 - خاموش.
عدد-فرمان خیلی ساده محاسبه می شود: اگر دکمه قرمز فشار داده شود، عدد 60 گرفته می شود (برای LED قرمز، پایه 6 آردوینو را انتخاب کردیم) و بسته به اینکه LED باید یا خیر، 1 یا 0 به آن اضافه می شود. حالا روشن باشه یا نه برای دکمه سبز همه چیز یکسان است، به جای 60 فقط 70 گرفته می شود (چون LED سبز رنگ به پین 7 وصل شده است). در نتیجه، در مورد ما، 4 تیم ممکن است: 60، 61، 70، 71.
بیایید کدی را بنویسیم که تمام موارد بالا را پیاده سازی کند.
بسته MainActivity.java en.amperka.arduinoctled ; واردات java.io.IOException ; وارد کردن java.io.OutputStream; وارد كردن java.lang.reflect.InvocationTargetException; وارد کردن java.lang.reflect.Method; وارد کردن android.app.Activity ; وارد كردن android.bluetooth.BluetoothAdapter; وارد كردن android.bluetooth.BluetoothDevice; وارد كردن android.bluetooth.BluetoothSocket; وارد کردن android.content.Intent ; وارد کردن android.os.Bundle ; وارد کردن android.util.Log; وارد کردن android.view.Menu ; وارد کردن android.view.View; وارد كردن android.view.View.OnClickListener; وارد کردن android.widget.Toast; وارد کردن android.widget.ToggleButton; کلاس عمومی MainActivity ابزارهای Activity را گسترش می دهد چشم انداز OnClickListener( //نمونه هایی از کلاس های دکمه ما ToggleButton redButton; ToggleButton greenButton; // سوکتی که با آن داده ها را به آردوینو می فرستیم BluetoothSocket clientSocket; //این تابع با شروع برنامه به طور خودکار اجرا می شود@Override void محافظت شده onCreate(Bundle savedInstanceState) ( super .onCreate (savedInstanceState) ; setContentView(R.layout .activity_main ) ; // "اتصال" نمای دکمه در پنجره برنامه با پیاده سازی redButton = (ToggleButton) findViewById(R.id .toggleRedLed) ; greenButton = (ToggleButton) findViewById(R.id .toggleGreenLed) ; //یک "شنونده کلیک" را به دکمه اضافه کنید redButton.setOnClickListener (این) ; greenButton.setOnClickListener (این) ; // بلوتوث را روشن کنید. اگر قبلاً فعال شده باشد، هیچ اتفاقی نمی افتد. رشته enableBT = BluetoothAdapter.ACTION_REQUEST_ENABLE ; startActivityForResult(new Intent(enableBT) , 0 ); //ما می خواهیم از آداپتور بلوتوث پیش فرض استفاده کنیم BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter(); //تلاش برای انجام این کارهاتلاش كردن( //دستگاه با آدرس داده شده بلوتوث Bee ما است //آدرس به صورت زیر تعریف می شود: برقراری ارتباط //بین کامپیوتر و ماژول (پین: 1234) و سپس به تنظیمات نگاه کنید //آدرس ماژول اتصال. به احتمال زیاد مشابه خواهد بود.دستگاه BluetoothDevice = bluetooth.getRemoteDevice("00:13:02:01:00:09" ); //ارتباط با دستگاه را آغاز کنید روش m = device.getClass () .getMethod ("createRfcommSocket" , new Class ( int .class ) ); clientSocket = (BluetoothSocket) m.invoke (دستگاه، 1 ) ; clientSocket.connect(); // در صورت بروز هر گونه خطایی، پیامی را به لاگ ارسال کنید) گرفتن ( IOException Security Exception e) ( Log.d ("BLUETOOTH" , e.getMessage () ) ; ) catch ( NoSuchMethodException e) ( Log.d ("BLUETOOTH" , e.getMessage () ) ; ) catch ( IllegalArgumentException e) ( Log.d ("BLUETOOTH" , e.getMessage () ) ; ) catch ( IllegalAccess Exception e) ( Log.d ("BLUETOOTH" , e.getMessage () ) ; ) catch ( InvocationTargetExceptionه) ( Log.d ("BLUETOOTH" , e.getMessage () ) ;) //نمایش پیامی در مورد اتصال موفقیت آمیز Toast.makeText (getApplicationContext() , "CONNECTED" , Toast.LENGTH_LONG ) .show () ; ) @Override بولین عمومی onCreateOptionsMenu( منومنو) ( // منو را باد کنید. در صورت وجود، موارد را به نوار اقدام اضافه می کند. getMenuInflater() .inflate(R.menu .main , menu) ; بازگشت درست ) // فقط این تابع فراخوانی می شود@Override public void onClick( چشم انداز v)( //تلاش برای ارسال دادهتلاش كردن( // جریان خروجی را برای انتقال داده دریافت کنید خروجی جریان outStream = clientSocket.getOutputStream(); مقدار int = 0 ; //بسته به اینکه کدام دکمه فشار داده شده باشد، //تغییر داده برای ارسال if (v == redButton) ( value = (redButton.isChecked () ? 1 : 0 ) + 60 ; ) other if (v == greenButton) ( value = (greenButton.isChecked () ? 1 : 0 ) + 70 ; ) //داده ها را در جریان خروجی بنویسید outStream.write(value) ; ) گرفتن ( IOExceptionه)( // در صورت وجود خطا، آنها را در لاگ چاپ کنید Log.d ("BLUETOOTH"، e.getMessage (، OUTPUT) ؛ pinMode(7، OUTPUT) ؛ ) void loop() ( //اگر داده رسیده است if (Serial.available() > 0 ) ( //بایت ورودی را بخوانیدبایت incomingByte = Serial.read(); // عدد پین را با تقسیم عدد صحیح مقدار بایت دریافتی بر 10 بدست آورید //و عملی که با بدست آوردن باقیمانده تقسیم بر 2 نیاز داریم: //(1 - روشن کردن، 0 - خاموش کردن) digitalWrite(incomingByte / 10 , incomingByte % 2 ); ))ویژگی های پر کردن طرح
برای برقراری ارتباط بلوتوث زنبور با کنترلر، از همان پین های (0 و 1) برای سیستم عامل استفاده می شود. بنابراین، هنگام برنامه ریزی کنترلر، کلید "SERIAL SELECT" روی "Wireless Shield" باید در موقعیت "USB" قرار گیرد و پس از چشمک زدن باید آن را به موقعیت "MICRO" برگردانید.
نتیجه
نتیجه
در این مقاله با نحوه ساخت اپلیکیشن برای سیستم عامل اندروید و انتقال اطلاعات از طریق بلوتوث آشنا شدیم. حال با فشار دادن دکمه روی صفحه نمایش گوشی مبتنی بر سیستم عامل اندروید، وضعیت LED روی برد تغییر می کند.
می توانید یک ایده توسعه دهید و یک رابط کاربر پسندتر در اندروید ایجاد کنید، دستگاه های بسیار پیچیده تری را با آن کنترل کنید، برنامه های جالبی را در مارکت اندروید منتشر کنید و خیلی چیزهای دیگر!
انتقال سیستم عامل، به روز رسانی ها و سایر داده ها با استفاده از آهن لحیم کاری و سیم بهترین راه حل برای آردوینو نیست. با این حال، میکروکنترلرهای آردوینو وای فای ارزان نیستند و همیشه نیازی به آنها نیست، به همین دلیل است که کاربران ترجیح می دهند بی جهت از آنها در پروژه های خود استفاده نکنند.
اما یکی دیگر از محصولات چینی بازار را تسخیر کرده است، مسدود کننده وای فای esp8266 را خودتان انجام دهید، می تواند به برد آردوینو یا سیستم دیگری متصل شود و با چندین مزیت دیگر ارتباط پایداری خواهید داشت. پس بیایید به arduino uno wi-fi بپردازیم و آیا ارزش خرید این ماژول را دارد و همچنین به طور کلی میکروکنترلر مشابهی در arduino wi-fi چیست.
در حال حاضر اکثر کاربران آردوینو دیگر نگران قیمت چنین دستگاه هایی نیستند، اگرچه 3 سال پیش ماژول وای فای آردوینو یک محصول لوکس به حساب می آمد. همه اینها به لطف مسدود کننده وای فای esp8266 است که سازندگان آن محصول کاملاً جدیدی را به بازار معرفی کردند که در عملکرد آن قابل توجه و در عین حال کاملاً ارزان بود که سهم قابل توجهی داشت و رقابت را در این راستا ایجاد کرد.
بنابراین، arduino wi-fi esp8266 اکنون مانند همه برادرانش مقرون به صرفه ترین ماژول موجود در بازار است. بنابراین ، قیمت در سایت های خارجی از 2 دلار شروع می شود ، که به شما امکان می دهد این ماژول ها را به صورت دسته ای خریداری کنید و آنها را هزار بار مجدداً مجدداً باز نکنید و برای حفظ عملکرد ، مخاطبین را لحیم کنید.
![](https://i0.wp.com/arduinoplus.ru/wp-content/uploads/2018/01/esp-620x883.jpg)
در ابتدا، این ماژول وای فای آردوینو عمدتاً به عنوان سپر وای فای آردوینو استفاده می شد، زیرا ارزان ترین گزینه بود و به هیچ وجه کمتر از نمونه اصلی نبود. این دستگاه واقعاً تقریباً افسانه ای است ، زیرا هیچ منفی قابل توجهی برای هزینه آن وجود ندارد. کتابخانه های زیادی از جمله کتابخانه های کاربر وجود دارد و همچنین از عملیات از طریق گذرگاه های سریال و ساده ترین دستورات AT و AT + پشتیبانی می کند. به همین دلیل، مانند سایر میکروکنترلرهای شخص ثالث، نیازی به مطالعه معنایی C99 بدنام نیست.
بر این اساس، حتی یک مبتدی آن را در چند ثانیه متوجه می شود و یک حرفه ای می تواند از کتابخانه های از قبل آماده شده استفاده کند. مزایای دیگر عبارتند از:
- پردازنده 160 مگاهرتز است، اما 32 بیتی است که تأثیر خاصی در عملکرد به جا می گذارد. اما شایان ذکر است که این ماژول هنوز به همراه بردهای آردوینو استفاده می شود، که خود فرکانس های بالا را کاهش می دهند و بیشتر منابع را می خورند زیرا هیچ کس نمی داند چرا.
- سازنده ای که ماژول wi-fi esp8266 را منتشر کرد پروژه های جالبی را در این زمینه به پایان نرساند و اکنون یک سری میکروکنترلر با کیفیت ثابت وجود دارد.
- استانداردهای مدرن امنیت شبکه البته WPA و WPA2 مدت زیادی است که به آن اندازه ای که ما دوست داریم امن نبوده اند، اما حضور آنها نمی تواند باعث خوشحالی چنین کنترلر ارزانی نشود.
- 16 پورت خروجی، از جمله 10 بیت، به شما امکان آزمایش با برد را می دهد.
مهمتر از آن، تا 4 مگابایت حافظه دائمی خارج از جعبه در انتظار شما است، بسته به نوع برد، و این کار با کتابخانه های بزرگ و حتی برخی فایل های رسانه ای را بسیار آسان می کند. در واقع، در اکثر بردهای آردوینو، 1 مگابایت یک لوکس غیرقابل قیمت در نظر گرفته می شود.
ویژگی های wi-fi esp8266 قطعاً خوشایند است، به خصوص در مقایسه با رقبای گران قیمت آن، اما کاربری که تجربه قبلی با این بردها را نداشته باشد، در مورد نحوه اتصال آن سوال خواهد داشت. واقعیت این است که پین های این ماژول بسیار بیشتر از آن چیزی است که افراد مبتدی به دیدن آن عادت دارند، و بر این اساس، آنها شروع به وحشت می کنند. با این حال، اگر وضعیت را درک کنید، در واقعیت هیچ چیز پیچیده ای در مورد آن وجود ندارد. کافی است لحیم کاری و آهن لحیم کاری را ذخیره کنید و فقط دستورالعمل ها را بخوانید.
نحوه اتصال ماژول وای فای به آردوینو
بیایید اتصال esp8266 esp 12e و esp8266 wi-fi uart bridge را بررسی کنیم. از این گذشته، این اتصال و پیکربندی ماژول است که بیشترین سؤال را ایجاد می کند.
![](https://i0.wp.com/arduinoplus.ru/wp-content/uploads/2018/01/esp8266_esp12e-620x479.png)
اول از همه، تصمیم بگیرید که کدام نسخه از میکروکنترلر را در دسترس دارید. در اولی، LED ها در نزدیکی پین ها ساخته می شوند، و در دومی، که اخیراً شروع به تولید کردند، چراغ های سیگنال در نزدیکی آنتن قرار دارند.
قبل از اتصال، باید آخرین سیستم عامل را دانلود کنید، که به شما امکان می دهد نرخ تبادل بسته را تا 9600 واحد اطلاعات در ثانیه افزایش دهید. و اتصال را از طریق کابل usb-ttl و ترمینال مربوطه از CoolTerm بررسی می کنیم.
![](https://i0.wp.com/arduinoplus.ru/wp-content/uploads/2018/01/esp-nano-620x292.png)
پایه های اتصال کابل که در بالا توضیح داده شد استاندارد هستند، اما برق از طریق یک پایه 3.3 ولتی آردوینو می رود. مهم است که به یاد داشته باشید که حداکثر جریانی که برد می دهد را نمی توان بالای 150 میلی آمپر تنظیم کرد و ماژول های wi-fi ابری witty esp8266 esp8266 esp 07 و esp8266 برای آردوینو به 240 میلی آمپر نیاز دارند.
با این حال، اگر منبع فعلی دیگری وجود نداشته باشد، می توانید از نسخه استاندارد آردوینو استفاده کنید، اما قدرت برد آسیب می بیند. اگرچه 70 میلی آمپر برای بار سبک کافی است، اما برای راه اندازی مجدد ناگهانی میکروکنترلر در زمان اوج بار آماده باشید و بر اساس آن نرم افزار بنویسید تا بدون بارگذاری بیش از حد برد، فایل ها را فیلتر و تقسیم کند.
![](https://i2.wp.com/arduinoplus.ru/wp-content/uploads/2018/01/esp-arduino-620x392.jpg)
یکی دیگر از گزینه های اتصال در زیر است. مهم - کنتاکت های RX-TX توسط یک خط کش به هم متصل می شوند. از آنجایی که سطوح سیگنال ماژول ESP8266 3.3 ولت و آردوینو 5 ولت است، برای تبدیل سطح سیگنال باید از یک تقسیم کننده ولتاژ مقاومتی استفاده کنیم.
ما ماژول وای فای را در آردوینو ثبت می کنیم
همانطور که می دانید با تجربه مناسب می توانید esp8266 ex 12e شیلد را با گوشی هوشمند جفت کنید اما برای مبتدیان ثبت esp8266 esp 12 در سیستم آردوینو با مشکل مواجه می شود. در واقع کافی است ماژول را به هم متصل کنید و با انداختن چند دستور AT معمولی از طریق منوی اشکال زدایی، عملکرد آن را بررسی کنید.
به عنوان مثال، می توانید یک LED استاندارد (برای نمودار اتصال بالا) چشمک زن اضافه کنید:
#define TXD 1 // GPIO1/TXD01 void setup() (pinMode(TXD, OUTPUT)؛ ) void loop() (digitalWrite(TXD, HIGH); delay(1000); digitalWrite(TXD, LOW); delay(1000) ;)
به محض اینکه برد تأیید کرد که میکروکنترلر را در سیستم می بیند، می توانید کار کامل با آن را شروع کنید. با این حال، شایان ذکر است که اگر از خود برد آردوینو در پروژه فقط برای اتصال این کنترلر استفاده شود، این غیر منطقی است.
یک مبدل USB-UART کافی است، زیرا esp8266 از "مغز" آردوینو استفاده نمی کند و حافظه فلش آن برای ذخیره چند کتابخانه اصلی و سیستم عامل کافی است. بر این اساس، صرف هزینه اضافی برای برد کمکی بی فایده است اگر بتوانید آن را به مبدل لحیم کنید و به استفاده از آن در پروژه ادامه دهید. در عین حال، با اتصال یک منبع تغذیه کمکی و بدون نگرانی از اینکه انتقال داده ها در حساس ترین لحظه به دلیل کمبود برق سیستم متوقف می شود.
یادداشت مهم! برای آخرین مدار، طرح را طبق معمول در آردوینو آپلود می کنیم، اما از آنجایی که ماژول ESP8266 به پین های 0 و 1 متصل است، برنامه نویسی غیرممکن می شود. کامپایلر یک خطا نشان می دهد. سیمهایی که به ESP8266 میروند را از پایههای 0 و 1 جدا کنید، برنامهنویسی را انجام دهید و سپس پینها را در جای خود قرار دهید و دکمه ریست را در آردوینو فشار دهید.