Første kig: Javascript Microcontrollers til webudviklere - 💡 Fix My Ideas

Første kig: Javascript Microcontrollers til webudviklere

Første kig: Javascript Microcontrollers til webudviklere


Forfatter: Ethan Holmes, 2019

Tesselbrættet (til venstre) og Espruino bordet (til højre)

Espruino er afsendt til sine Kickstarter-backers, og Tessel er på planlægning til at sende i maj, og vi er ved at få vores hænder på Tessel-hardware, og du kan forvente en dybdegående anmeldelse snart.

På trods af eksplosionen af ​​nye brædder kommer til markedet - og på grund af det samfund, der er vokset op omkring dem - ville jeg uden tøven anbefale Arduino, hvis du har brug for et 8-bit micro-controller bord eller Raspberry Pi, hvis du har brug for det en single-board computer, der kører Linux.

Det er de lokalsamfund, der gør Arduino og Raspberry Pi så nyttige, hvilket problem du måske kommer på tværs af, det er sandsynligt, at en anden har stødt på det allerede, og løsningen, eller i det mindste nøglen til løsningen, venter allerede på dig og er bare en Google-søgning væk.

Logisk er den eneste måde, hvorpå et nyt styre skal lykkes, enten at overtage et af de eksisterende samfund, oprette sit eget samfund eller samarbejde om et allerede eksisterende fællesskab, men er ikke bundet til en eksisterende mikrocontroller.

Lige nu er der to nye mikro-controller boards, der søger finansiering - en på Kickstarter, og den anden på Dragon Innovation's nye crowdfunding platform - der er lidt anderledes. Disse brædder er ikke bare endnu en Arduino klon, eller endnu en mulig "Hindbær Pi morder." Disse to brædder, Tessel fra technical.io og Espruino fra Pur3, har til hensigt at tage den mindst tilbagelagte vej og co-op et eksisterende samfund, der ikke traditionelt er forbundet med skabersamfundet.

Målrettet ret i mellemrummet mellem Arduino i den lave ende og Raspberry Pi i den høje ende, begge disse brædder bruger Javascript som deres programmeringssprog, og begge bruger det så tæt på metal som muligt. Dette er hardware hacking til webprogrammører, og det vil være interessant at se, om deres ankomst vil bringe Javascript-fællesskabet med dem, når de ankommer.

Det er slutningen af ​​måneden, før crowdfunding indsatsen for disse bestyrelser lukker ud, selvom begge allerede har fordoblet deres finansieringsmål, og starten af ​​næste år, før producenten i gaden vil se den endelige produktions hardware. Men en af ​​fordelene ved at arbejde for Make er, at du nogle gange kommer til at prøve hardware forud for andre mennesker, og jeg har preproduktions prototyper af både Tessel og Espruino boardsne sidder på mit skrivebord lige nu - en af ​​tolv i tilfælde af Tessel, og en af ​​kun to i tilfældet med Espruino.

Tessel

Tessel fra technical.io var en af ​​de otte produkter, der lancerede den nye Dragon Innovation crowdfunding platform i sidste uge, og den første til at nå sit finansieringsmål. Tessel er rettet mod den høje ende af kløften mellem Arduino og Raspberry Pi, helt i internetforbundne applikationer, der er målrettet mod fysiske enheder, og har WiFi indbygget. Det betyder ikke kun, at bestyrelsen altid er online, så den kan bruges både som en server og en klient, men du har mulighed for at distribuere din kode på tavlen via netværket.

Ud over standard GPIO-bank i den ene ende, der omfatter SPI, I2C og UART-kapacitet samt 6 Generelle Input / Output-stifter, 6 analoge til digitale konvertere, en 5V-pin, en 3,3V-pin og en jordstift- bestyrelsen understøtter et modulsystem, hvilket gør det nemmere at tilføje evner til et projekt uden lodning. Der er to typer moduler, begge har samme stik. Klasse A-moduler-et relæ, temp / luftfugtighed, servo, accelerometer og micro-SD-kort-og lidt dyrere klasse B moduler-RFID, Bluetooth LE, GPS og lydkort.

Min pre-produktion Tessel kom med et servomodul, der kræver en anden strømforsyning dedikeret til servoerne.

Tesselbrættet med Servo Modul med standard servo.

Koden til at køre servomodulet er ret simpelt,

var servo = kræve ('servo-pca9685'); // Initialiser servo. console.log ( "initalizing"); // Port A, servo 1, kalibrere min / max PWM på 4-15 var cs61 = servo.port ('A'). Tilslut (1, 4, 15); cs61.on ('connected', funktion () {var pos = 0; setInterval (funktion () {console.log ("Deg rotation:", pos); cs61.move (pos); // Forøgelse med 45 grader + = 45; hvis (pos> 180) {pos = 0;}}, 1500);});

Bestyrelsen udnytter npm og det sprawling node.js-fællesskab - installer kun servomodulet ved hjælp af npm i din node.js-installation og tryk derefter din kode til Tessel-kortet ved hjælp af Tessel npm-pakken. Men det er ikke bare deres egen infrastruktur, der bruger npm, bestyrelsen vil være kompatibel med tusindvis af eksisterende node.js moduler tilgængelige via npm.

Det faktum, at det er node.js-kompatibelt, kan være en stor faktor i Tessel-bestyrelsens succes, node-fællesskabet er stort, entusiastisk og som det kan ses af indsatser som nodecopter og Johnny Five, der allerede er åbne for at arbejde med hardware. Det er en stor gevinst for Tessel, de har et øjeblikkeligt samfund bag dem. Det tæller meget.

Taler med Tim Ryan

Jeg talte med Tim Ryan, en af ​​medstifterne af Technical Machine,

Hvad er målet for Tessel-projektet?

Vores mål er at gøre hardwareudvikling et naturligt forslag til softwareudviklere. En stor del gør det muligt for web- og mobiludviklere at kunne bruge deres eksisterende færdigheder til at styre den fysiske verden.

Hvad er den underliggende arkitektur i Tessel-bestyrelsen?

Internt har vi udviklet en JavaScript-tolk bygget omkring Lua runtime, der er kompatibel med Node.js API. Ingen native C ++ moduler, men kontrolflow og HTTP moduler nemt. Vores OS er en eventuel sløjfe på det bare metal. Højhastigheds signalstyring og respons styres asynkront. Vi har eksperimenter, der styrer LED-matricer med høj hastighed, og SPI-periferiudstyr, der viser, at det er et overkommeligt alternativ til realtime-kode, samtidig med at de er meget mere intuitive at skrive.

For eksempel klager hovedparten af ​​vores perifere (for det meste SPI og I2C) kode på omkring 50 eller 100 linjer med kommenterede kode. Vores runtime giver os selv forslaget om at lave simulation lige på din kommandolinje, før du distribuerer kode, hvilket giver webudviklere et andet kendt værktøj, automatiseret test. At komme i gang med ethvert modul, vi producerer, er så enkelt som "npm installer accelerometer-mma8542q" og kræver det i kode. Vores udvikling og implementering udfoldelse er designet til at være kun få skridt ud af boksen til at have et fungerende eksempel-plug i bibliotek, download kommandolinje værktøj, implementere.

Hvorfor Javascript?

For Tessel er vi helt fokuseret på at lave de samme værktøjer til web / mobil udviklingsarbejde på indlejrede boards. Mellem nodens pakkeleder og API'er og dit valg af IDE, bør ideen være, at de samme færdigheder og arbejdsgange for at skubbe til en server er dem, du bruger her. Der er meget samarbejde involveret i at lave nye API'er ”JavaScript-lignende”, så forhåbentlig kan den næste generation af Javascript-kort alle bruge de samme SPI-biblioteker, for eksempel.

Du rullede din egen Javascript stack, hvorfor var det?

Tessel taber helt sikkert uden at gå med en moderne JavaScript-motor. Men i forhold til Linux + V8 - som kræver 8-10mb startup-hukommelse - er vores hukommelseskost takket være Lua minimal, mindre end 70kb.

Vi har ikke til hensigt at konkurrere med mikroprocessorer som Raspberry Pi, vi er mere interesserede i udvikling, der skaler ned - ikke op til mindre magtfulde boards og SoCs. Der er plads i fremtiden til en $ 3 Cortex-M3 mikroprocessor, der kører JavaScript, fordi det er en naturlig løsning til internetforbindelse eller IO-tung kode, og det er den historie, vi ønsker at komme over til udviklere, at du muliggør så meget mere end blot et alternativ til C.

Hvad er dine fremtidige planer?

Vores køreplan er at starte med Tessel-a ”Høj-drevne” enhed - og arbejde mod mindre kraftfulde enheder. Vi har potentiale til at målrette brædder så små som Espruino med en meget hurtigere runtime, og vi investerer meget i at sikre, at Tessels runtime er en mulighed fornogeninternet-conencted enhed. Og langsigtet, ”Tessel” vil sandsynligvis ikke forblive en platform kun til JavaScript, men en nem platform til at skubbe firmware fra andre sprog-C / C ++, Lua, Rust, Go og logisk jævn Python og Ruby. Vores værdi er i nem arbejdsproces og biblioteker, ikke kun JavaScript selv.

Så vi væddemål på JavaScript-aktiverede udviklingskort er bare det første skridt. I et år fra nu vil tendensen være mod tilgængelig indlejret elektronik, som giver dig mulighed for at programmere i hvilket sprog du ønsker - så længe dit svar ikke er "C"! Tessel vil blive lige oven på den tendens.

Espruino

Lanceret et par dage forud for Tessel på Kickstarter, i slutningen af ​​august er Espruino bordet fra Pur3 væsentligt billigere end Tessel. På £ 19-det er omkring $ 30-det er faktisk mindre end halvdelen af ​​prisen på Tessel-bestyrelsen. Naturligvis er specifikationen af ​​Espruino meget lavere. Selvom de begge har ARM Cortex-M3-processorer, har Espruino kun 48 KB SRAM sammenlignet med Tessels 32 MB SRAM. Mens Tessel er rettet mod den høje ende af kløften mellem Arduino og Raspberry Pi, er Espruino rettet mod den nedre ende, men den er prissat til at matche.

Espruino er en interessant afgang fra de fleste moderne bestyrelser. I modsætning til Tessel-eller Arduino-uploader du ikke din kode til tavlen. I stedet har du en interaktiv tolk. Tilslut tavlen til din Mac eller pc, og tilslut dig til tavlen over USB seriel porten, og du vil blive præsenteret med en interaktiv konsol.

Det lader dig iterere virkelig hurtigt og nyder at tinkering med de ting, du laver. - Gordon Williams

Du kan bruge den interaktive konsol på nøjagtig den måde, du kunne forvente - og på en måde, der vil være velkendt for de af os, der voksede op med computere, der kørte BASIC-skriv bare din kode ved prompten.

Da Espruino er helt begivenhedsbaseret betyder det, at du kan skrive funktioner, som du kan ændre og tilføje til, mens de kører. Med Espruino uploader du ikke kode til bestyrelsen, i stedet for at du interagerer med det.

For eksempel kan vi oprette en simpel funktion, der vil passe på, at tasten ombord trykkes,

setWatch (funktion () {hvis (! digitalRead (BTN)) returnere; var led = 10; var flasher = setInterval (funktion () {led--; digitalWrite (LED1, ledet & 1); hvis (led <= 0) clearInterval flasher);}, 200);}, BTN, true);

Når denne funktion er indstillet, vil den se efter knappen til trykbegivenhed i baggrunden, og du vil blive returneret til interaktiv prompt. Præcis som du ville forvente.

Espruino bordet blinker en LED efter at have trykket på en knap

På samme måde havde Apple Microsofts [+ og i mindre grad TRS-80, ware velkendte seværdigheder i amerikanske skoler, i Storbritannien i 80'erne og 90'erne. Det forlod en varig arv, og på trods af ikke at blive eksplicit markedsført til uddannelse tror jeg, at dette bestyrelse er et must for skolerne, og at lære folk programmering.

Espruino, måske endnu mere end Raspberry Pi-et andet britisk-baseret projekt rettet mod skoler og undervisning af børn til at programmere - er en værdig efterfølger til BBC Micro.

Taler med Gordon Williams

Jeg talte med Gordon Williams, skaberen af ​​Espruino, om styret og hans Kickstarter-kampagne,

Espurino har en interaktiv tolk, hvorfor gjorde du ting på den måde?

Jeg kan godt lide C, men når du skriver kompileret kode til mikrocontrollere, er der en reel frakobling mellem dig og mikrocontrolleren. Den kører i en sort boks, og den eneste måde du kan interagere med din software, da den kører, er ved at tilføje endnu flere software (eller måske ved at bruge en debugger).Eksempelvis lavede jeg en kasse til at styre variabel ventiltiming på min bils motor, men 90 procent af indsatsen involveret var faktisk i at tilføje kode, så jeg kunne kontrollere, hvad den gjorde og justere værdier, mens motoren kørte . Hvis du har en interaktiv tolk, så er det hele gjort for dig.

Så jeg ønskede et sprog, der kunne tolkes, inspiceres og ændres i flyve, men det lignede meget C - og jeg ønskede at bruge noget, der allerede eksisterede i stedet for at lave min egen, som Electric Imp-fyrene har gjort med egern . Jeg havde implementeret en lille version af JavaScript, kaldet TinyJS, til et tidligere projekt, så det gav meget mening at basere Espruino på det. Beslutningen om at bruge en begivenhedsbaseret model kom faktisk på grund af JavaScript - og det syntes bare at være en god pasform.

Hvorfor er en begivenhedsbaseret model bedre end den loopbaserede model, som Arduino og andre controllere bruger?

Brug af en begivenhedsbaseret model har flere store fordele. Det betyder forskellige stykker kode, der gør forskellige job kan køre sammen uden at forstyrre, og du kan redigere kode i mellem behandling af begivenheder i stedet for at skulle bryde ud af hovedløkken. Det er mere intuitivt, fordi det efterligner den måde, hvorpå folk naturligt beskriver opgaver i den virkelige verden"Når det er mørkt, tænder lyset" hellere end, "Er det mørkt? Er det mørkt? Er det mørkt? Ja. Tænd lyset!" og det passer godt til det grafiske programmeringsmiljø, fordi det er mere modulært. Endelig reducerer strømforbruget drastisk, så det er fantastisk til batterilevetiden.

Du rullede din egen Javascript stack, hvorfor var det?

At skrive min egen tolk var virkelig nødvendighed snarere end valg. Hvis du ser på hukommelseskravene til de vigtigste tolke som V8-brugt af node.js og SpiderMonkey, er de ret store - i området med megabyte. De har også kroge i de underliggende operativsystemer, så de forsøger at køre dem på en lille enhed, sådan en mikrocontroller - med omkring × 1000 mindre RAM-uden operativsystem er næsten umuligt.

Espruino bruger ARC i stedet for affaldssamling, det passer bare fint sammen med tolkets funktion, og det gør næsten hver hukommelseallokering / -allokering meget hurtig, især da alle blokke er lige store.

Det fører til et interessant punkt om disse ARM-mikrocontrollere. Espruino kører på 72Mhz med 48KB RAM, så i et meget groft skøn kan det læse hver enkelt byte af hukommelsen på omkring 1ms. Sammenlign dette med en Raspberry Pi med 800Mhz og 512MB RAM med en læsetid nærmere 1 sekund. Det betyder, at du skal tænke på, hvordan du håndterer data helt anderledes, og det er en af ​​grundene til, at jeg ikke nemt kunne bruge en eksisterende tolk .

Mange Kickstarter-projekter har problemer med skalering. Hvis dit projekt er en løbende succes, er du klar?

Ja. Jeg har et produktionskort, som jeg kan sende til Seeed Studio, det er klar til at gå. I løbet af de sidste to måneder har vi arbejdet sammen med Seeed for at forbedre vores design og sourcing komponenter fra Seeed's Open Parts Library for at sikre, at vi ikke går på kompromis med kvaliteten. Dette har gjort det muligt for os at producere designet til den nuværende version af Espruino Board. Men hvis projektet fik betydeligt flere midler end forventet, ville det være dejligt at bringe nogen ind for at hjælpe med vejledning og dokumentationssiden af ​​Kickstarter. Jeg synes, det handler om at give folk steder at starte, som det elektroniske terningsprojekt på vores Kickstarter-side.

Hvad er dine fremtidige planer?

Hvis vi når £ 50.000 på vores nuværende kampagne, tilføjer vi support til CC3000 WiFi modulet i Espruino bordet. Vi vil ikke producere et WiFi-skjold - vi skal fokusere på Espruino selv - men vi vil tilføje støtte til CC3000 til Espruino-boardets software, før det sendes til dig. Det betyder, at du kan købe et præfabrikat modul, tilslutte det og få øjeblikkelig internetadgang. Men jeg er også fristet til at opbygge et "skjoldskærm", som ville glide under Espruino bordet for at give det en Arduino-kompatibel pin ud. Fremadrettet Jeg er også interesseret i at opbygge en meget mindre version af Espruino bordet.

Gør to brædder en trend?

Javascript-fællesskabet har allerede interesse for hardware. Du skal kun se på nodecopter for at se det - og ankomsten af ​​ikke en, men to bestyrelser, der både er JavaScript-indbyggede og arrangementsbaserede, vil blive opfyldt med stor interesse. Det heldige faktum, at bestyrelserne ikke rigtig konkurrerer med hinanden, Tessel rettet mod high-end og Espruino den nederste ende, betyder nok, at begge vil finde en niche, og den niche bliver ret omfattende.

To brædder muliggør ikke en trend, men jeg vil ikke blive overrasket over at se disse to brædder inspirere en ny generation eventdrevne mikrocontrollere-så disse to brædder kan bare.

 



Du Kan Være Interesseret

Denne Makerspace bringer STEM-studerende sammen til Hack Kørestole

Denne Makerspace bringer STEM-studerende sammen til Hack Kørestole


Denne Vintage Macintosh blev gemt fra Papirkurven (Sort)

Denne Vintage Macintosh blev gemt fra Papirkurven (Sort)


Udforsk Electronics Basics og mere i Collins Lab

Udforsk Electronics Basics og mere i Collins Lab


7 Wind swept projekter for at fejre National Kite Flying Day

7 Wind swept projekter for at fejre National Kite Flying Day






Seneste Indlæg