Paano lumikha ng mga programa para sa Windows sa Arduino

Paano lumikha ng mga programa para sa Windows sa Arduino

Isang araw nagkaroon ako ng baliw na ideya na dalhin 500 laser pointer sa isang lugar. Gumugol ako ng maraming oras at ginawa ito. Ito ay naging kamangha-manghang at walang silbi, ngunit nagustuhan ko ito. Anim na buwan na ang nakalipas ay nagkaroon ako ng isa pang nakakatuwang ideya. Sa oras na ito, hindi sa lahat ng kamangha-manghang, ngunit mas kapaki-pakinabang. Gumugol din ako ng maraming oras dito. At sa artikulong ito, nagpapakita ako ng beta na bersyon ng aking pangalawang nakatutuwang ideya.

Tinawag ko ang proyektong Nanonyam (Nanonyam) at nakaisip pa ako ng logo para dito (nag-drawing ako ng 5 minuto).

Paano lumikha ng mga programa para sa Windows sa Arduino

Para sa mga nag-iisip sa mga tuntunin ng Arduino, maaari nating sabihin na ang Nanonyam ay isang virtual na Arduino shield para sa pagkontrol sa Windows.

Sa madaling salita, ang Nanonyam ay isang virtual machine na gumagamit ng firmware para sa AVR microcontroller (Inirerekomenda ang ATMEGA2560) bilang bytecode. Sa loob ng virtual machine na ito ay isang AVR core simulator, ngunit sa halip na mga peripheral, na matatagpuan sa mga address ng SRAM mula 0x0060 hanggang 0x01FF, mayroong isang espesyal na interface sa mga virtual na function (kabilang ang mga function ng Windows API). At narito napakahalaga na maunawaan kaagad: ang code para sa Nanonyam ay hindi dapat magkaroon ng anumang pag-access sa tinukoy na hanay ng memorya, upang hindi aksidenteng tumawag, halimbawa, ang pag-andar ng pagtanggal ng mga file o pag-format ng isang disk. Ang natitirang bahagi ng SRAM memory range mula 0x0200 hanggang 0xFFFF (ito ay higit pa sa isang tunay na microcontroller) ay magagamit ng user para sa anumang layunin. Napansin ko kaagad na mayroong isang espesyal na proteksyon laban sa hindi sinasadyang paglulunsad ng firmware ng isang tunay na microcontroller (o firmware mula sa isa pang arkitektura): bago i-activate ang "mapanganib" na mga function, kailangan mong tumawag sa isang espesyal na nakakalito na virtual function. Mayroong ilang iba pang mga tampok ng seguridad.

Upang lumikha ng mga programa para sa Nanonyam, kailangan mong gumamit ng mga espesyal na aklatan na nagpapatupad ng lahat ng kasalukuyang magagamit na virtual function. I-download ang Nanonyam virtual machine at mga aklatan para dito Pagkatapos ay maaari mong. Ngunit ang pahina ng paglalarawan ng virtual function. At oo, ang aking site ay napaka-primitive at hindi inangkop para sa mga mobile device.

Ang Nanonyam ay libre para sa bahay at komersyal na paggamit. Ang programang Nanonyam ay ibinibigay sa "as is" na batayan. Hindi ibinigay ang source code.

Ang programa ay kasalukuyang nasa yugto ng pagsubok. Ipinatupad ang tungkol sa 200 virtual function na nagbibigay-daan sa iyong lumikha ng mga simpleng program para sa Windows.
Malinaw, ang paglikha ng isang bagay na kumplikado sa tulad ng isang virtual na makina ay hindi gagana, dahil ang memorya para sa code ay 256 kB lamang. Ang data ay maaaring maimbak sa magkahiwalay na mga file, ang buffer para sa graphic na bahagi ay ipinatupad sa labas. Ang lahat ng mga function ay pinasimple at inangkop para sa 8-bit na arkitektura.

Ano ang maaari mong gawin sa Nanonyam? Nagkaroon ako ng ilang problema.

Pag-unlad ng mga bloke ng programa

Minsan ay kailangan kong magdisenyo ng isang kumplikadong menu para sa isang 128x64 tuldok na graphic na display. Talagang hindi ko nais na patuloy na i-load ang firmware sa isang tunay na microcontroller upang makita kung ano ang hitsura ng mga pixel. At kaya ang ideya ng Nanonyam ay ipinanganak. Ang figure sa ibaba ay nagpapakita ng isang imahe mula sa isang tunay na OLED display ng isa sa mga item sa parehong menu. Ngayon ay magagawa ko na ito nang walang tunay na device.

Paano lumikha ng mga programa para sa Windows sa Arduino

Ang Nanonyam (sa huling ideya nito) ay isang mahusay na tool para sa pag-eehersisyo ng mga bloke ng programa para sa mga microcontroller, dahil may mga function para sa pagtatrabaho sa mga graphics (maaari mong gayahin ang mga display at indicator), na may mga file (maaari kang gumawa ng mga log, basahin ang data ng pagsubok), na may isang keyboard (maaari kang magbasa ng hanggang sa 10 mga pindutan sa parehong oras), na may mga COM port (narito ang isang hiwalay na item).

Paglikha ng Mga Mabilisang Programa

Halimbawa, kailangan mong mabilis na magproseso ng 100500 text file. Ang bawat isa ay kailangang buksan, bahagyang binago ayon sa ilang simpleng algorithm, i-save at isara. Kung ikaw ay isang Python master, pagkatapos ay binabati kita, nasa iyo ang lahat. Ngunit kung ikaw ay isang hardened arduino (at marami sa kanila), pagkatapos ay tutulungan ka ng Nanonyam sa paglutas ng problemang ito. Ito ang aking pangalawang layunin sa Nanonyam: upang magdagdag ng maraming kapaki-pakinabang na mga function tulad ng pagpoproseso ng teksto, pagkuha ng mga screenshot o pagtulad sa mga keystroke sa system (na lahat, sa pamamagitan ng paraan, ay naroroon na), pati na rin ang maraming iba pang mga pag-andar para sa paglutas ng mga nakagawiang gawain .

Pagsubok ng hardware sa pamamagitan ng COM port

Ang Nanonyam ay maaaring kumilos bilang isang terminal na gumagana ayon sa iyong algorithm. Maaari kang gumuhit ng maliit na menu upang kontrolin ang device at ipakita ang data na natanggap mula sa port. Maaari mong i-save at basahin ang data mula sa mga file para sa pagsusuri. Isang madaling gamiting tool para sa simpleng pag-debug at pag-calibrate ng hardware, pati na rin para sa paglikha ng mga simpleng virtual na control panel ng instrumento. Para sa mga mag-aaral at mga batang siyentipiko, ang proyektong ito ay maaaring maging lubhang kapaki-pakinabang.

Pagsasanay sa programming

Gayunpaman, tulad ng sa buong proyekto ng Arduino, ang pangunahing pagiging kapaki-pakinabang ng Nanonyam ay nakasalalay sa pagpapasimple ng mga function, interface at bootloader. Samakatuwid, ang proyektong ito ay dapat na interesado sa mga baguhan na programmer at sa mga nasiyahan sa antas ng arduino. Sa pamamagitan ng paraan, ako mismo ay hindi pa rin nag-aral ng arduino nang detalyado, dahil palagi akong gumagamit ng WinAVR o AVR Studio, ngunit nagsimula sa assembler. Samakatuwid, ang halimbawang programa sa ibaba ay medyo mali, ngunit medyo gumagana.

Hello Habr!

Oras na para maging pamilyar sa ilang feature ng Nanonyam at magsulat ng isang simpleng programa. Magsusulat kami sa Arduino, ngunit hindi sa karaniwang paraan, ngunit sa paraang magagawa ko ngayon (nasabi ko na na hindi ko pa naiisip nang mabuti ang kapaligiran na ito). Una, gumawa ng bagong sketch at piliin ang Mega2560 board.

Paano lumikha ng mga programa para sa Windows sa Arduino

I-save ang sketch sa isang file at susunod na kopyahin Nanonyam library. Tamang isama ang mga header ng mga aklatan, ngunit hindi ko alam kung paano magsulat ng compilation ng mga indibidwal na file sa Arduino, kaya sa ngayon ay direktang isasama namin ang mga aklatan (at sabay-sabay):

#include <stdio.h>
#include "NanonyamnN_System_lib.c"
#include "NanonyamnN_Keyboard_lib.c"
#include "NanonyamnN_File_lib.c"
#include "NanonyamnN_Math_lib.c"
#include "NanonyamnN_Text_lib.c"
#include "NanonyamnN_Graphics_lib.c"
#include "NanonyamnN_RS232_lib.c"

Mas magiging tama kung gumawa ng isang espesyal na module na "Nanonyam para sa Arduino", na maaaring direktang mai-install mula sa Arduino. Sa sandaling malaman ko ito, gagawin ko ito, ngunit sa ngayon ay ipinapakita ko lang ang kakanyahan ng pagtatrabaho sa isang virtual machine. Sinusulat namin ang sumusunod na code:

//Π‘Ρ€Π°Π·Ρƒ послС запуска рисуСм тСкст Π² ΠΎΠΊΠ½Π΅
void setup() {
  sys_Nanonyam();//ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅ΠΌ ΠΊΠΎΠ΄ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹
  g_SetScreenSize(400,200);//Π—Π°Π΄Π°Ρ‘ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ дисплСя 400Ρ…200 Ρ‚ΠΎΡ‡Π΅ΠΊ
  sys_WindowSetText("Example");//Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π°
  g_ConfigExternalFont(0,60,1,0,0,0,"Arial");//Π—Π°Π΄Π°Ρ‘ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ Windows Π² ячСйкС ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² 0
  g_SetExternalFont(0);//Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ячСйку ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² 0 для рисования тСкста
  g_SetBackRGB(0,0,255);//Π¦Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° синий
  g_SetTextRGB(255,255,0);//Π¦Π²Π΅Ρ‚ тСкста ΠΆΡ‘Π»Ρ‚Ρ‹ΠΉ
  g_ClearAll();//ΠžΡ‡ΠΈΡ‰Π°Π΅ΠΌ экран (Π·Π°Π»ΠΈΠ²ΠΊΠ° Ρ†Π²Π΅Ρ‚ΠΎΠΌ Ρ„ΠΎΠ½Π°)
  g_DrawTextCenterX(0,400,70,"Hello, Habr!");//РисуСм надпись
  g_Update();//Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ графичСский Π±ΡƒΡ„Π΅Ρ€ Π½Π° экран
}

//ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΆΠ΄Ρ‘ΠΌ закрытия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
void loop() {
  sys_Delay(100);//Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΈ Ρ€Π°Π·Π³Ρ€ΡƒΠ·ΠΊΠ° процСссора
}

Mag-sketch gamit ang program na ito maaaring i-download dito. Detalyadong paglalarawan ng mga function maghanap sa site. Umaasa ako na ang mga komento sa code na ito ay sapat upang makuha ang diwa nito. Dito function sys_Nanonyam() gumaganap ang papel ng isang "password" para sa virtual machine, na nag-aalis ng mga paghihigpit sa mga virtual na function. Kung wala ang function na ito, magsasara ang program pagkatapos ng 3 segundo ng operasyon.

Pinindot namin ang pindutang "Suriin" at hindi dapat magkaroon ng anumang mga error.

Paano lumikha ng mga programa para sa Windows sa Arduino

Ngayon ay kailangan mong kumuha ng binary file (firmware). Piliin ang menu "Sketch>>I-export ang binary file (CTRL+ALT+S)".

Paano lumikha ng mga programa para sa Windows sa Arduino

Kokopyahin nito ang dalawang HEX file sa sketch folder. Kinukuha lang namin ang file na walang prefix na "with_bootloader.mega".

Mayroong ilang mga paraan upang tukuyin ang isang HEX file sa Nanonyam virtual machine, lahat ng mga ito ay inilarawan sa pahinang ito. Iminumungkahi kong lumikha sa tabi ng file Nanonyam.exe file landas, kung saan irerehistro ang buong path sa aming HEX file. Pagkatapos nito maaari kang tumakbo Nanonyam.exe. Kumuha kami ng isang bintana na may inskripsiyon.

Paano lumikha ng mga programa para sa Windows sa Arduino

Katulad nito, maaari kang lumikha ng mga programa sa iba pang mga kapaligiran, tulad ng AVR Studio o WinAVR.

Dito namin tinapos ang aming pagkakakilala kay Nanonyam. Ang pangunahing ideya ay dapat na malinaw. Higit pang mga halimbawa ang nasa website.. Kung may sapat na mga tao na gustong gamitin ang proyektong ito, gagawa ako ng higit pang mga halimbawa at patuloy na "punan" ang mga library ng virtual function. Ang mga konkretong ideya para sa pagbuo ng proyekto at mga ulat ng mga malfunctions, bug at bug ay tinatanggap. Maipapayo na idirekta sila sa mga contact, ipinahiwatig sa website. At ang talakayan ay malugod na tinatanggap sa mga komento.

Salamat sa lahat para sa iyong pansin at mahusay na programming!

Pinagmulan: www.habr.com

Magdagdag ng komento