Apakah ada lompatan besar antara membuat prototipe pada Pi, dan menggunakan mikrokontroler?

25

Pertanyaan ini menanyakan, antara lain, apakah ada kurva belajar yang besar antara menggunakan Python pada Raspberry Pi untuk membuat prototipe titik akhir, dan menggunakan mikrokontroler.

Jelas ada peningkatan besar dalam konsumsi daya (dengan biaya pengurangan throughput prosesor) sehingga ada alasan yang baik untuk mengambil pendekatan MCU untuk suatu produk yang perlu bertenaga baterai.

Salah satu alasan potensial untuk tetap menggunakan komputer papan tunggal yang menjalankan Linux adalah bahwa tidak ada perangkat lunak baru untuk dipelajari (di atas python atau sejenisnya) dengan asumsi aplikasi dapat ditulis dalam bahasa tingkat tinggi (di mana harus ada banyak standar perpustakaan).

Pada platform pengembangan tertanam, pilihan yang mungkin adalah C ++ (mbed atau arduino), atau micropython. Kesan saya adalah bahwa ini tidak berbeda secara signifikan atau lebih kompleks daripada menulis kode untuk dijalankan di Linux - walaupun platform memang memiliki keunggulan individual. Pernahkah saya melewatkan sesuatu yang relevan dengan pengembang perangkat lunak?

Secara khusus, saya bertanya tentang titik akhir IoT - jadi tidak penting untuk memiliki sumber daya penuh sistem Linux untuk aplikasi yang saya minati di sini. Perlu juga ditekankan bahwa pertimbangan daya dan latensi menjadikan implementasi MCK persyaratan sulit dalam jenis aplikasi ini.

Sean Houlihane
sumber

Jawaban:

12

Menambah jawaban komprehensif George dan poin 2) dukungan perangkat keras. Bahkan jika perangkat keras yang diinginkan (misalnya ethernet, WiFi, kartu SD) ditambahkan ke mikrokontroler / Arduino melalui perisai atau papan ekstensi serupa, perpustakaan untuk mengoperasikannya membuat beban memori kecil (mis. ATMEGA328 (pengontrol Arduino khas) memiliki FLASH 32Kb dan RAM 2Kb). Terutama ketika menggabungkan beberapa fitur (jaringan, tampilan, kartu SD) ini bisa menjadi batasan yang parah.

Beberapa contoh dari dunia Arduino:

Mendukung kartu SD dan sistem file sederhana (FAT):

  • Kartu SD (ukuran kode tidak diketahui tetapi kemungkinan tidak menjadi masalah besar jika perangkat keras SPI digunakan), setidaknya buffer buffer 512 byte
  • Petit FAT FS membutuhkan ~ 2..4 kB FLASH dan ~ 44 byte RAM

Menggunakan tampilan matriks:

Ethernet dengan tumpukan protokol TCP / IP:

  • uIP : Persyaratan RAM dalam kisaran ukuran paket tertentu (> 1 kB), meskipun demikian, pengontrol Ethernet chip tunggal biasanya dilengkapi dengan buffer chip yang dapat menampung beberapa frame Ethernet berukuran maksimal.

    Dimungkinkan untuk menjalankan implementasi uIP dengan hanya 200 byte RAM, tetapi konfigurasi seperti itu akan memberikan throughput yang sangat rendah dan hanya akan memungkinkan sejumlah kecil koneksi simultan. ( Sumber. )

  • Tumpukan IP dengan protokol TCP dan UDP untuk Arduino : memori eksternal minimum 128 kB

  • IP over serial interface: SerialIP ~ 9 kB FLASH dan RAM "cukup"

Secara keseluruhan, pemrograman dengan batasan-batasan tersebut membutuhkan pendekatan yang sangat berbeda dan membutuhkan optimasi terkait ruang program dan ukuran kode (FLASH), data runtime (RAM), dan kecepatan eksekusi. Jawaban ini membuatnya lebih baik.

Sebagai pertanyaan yang secara khusus ditanyakan tentang platform mbed, tentu saja patut dicatat bahwa ia menyertakan fitur yang paling relevan dengan IoT, yaitu konektivitas bersama dengan enkripsi, otentikasi, dan otorisasi. Perangkat ini konon menawarkan dukungan perangkat keras Bluetooth Low Energy dan IPv6 melalui jaringan Nirkabel Personal Area rendah. Padahal fitur konektivitas ini hanya tersedia pada papan pengembangan yang terdaftar dengan biasanya> = 128 kB FLASH dan> = 16 kB RAM. Papan dev yang lebih kecil di sisi lain mencakup sistem dengan mikrokontroler sekecil ARM Cortex-M0 + Core dengan 16KB Flash, RAM 4KB (yaitu tidak lebih dari Arduino berukuran sedang) tanpa konektivitas khusus.

Ghanima
sumber
Keterbatasan sumber daya adalah kesenjangan terbesar dalam asumsi saya - mudah untuk melupakan kebanyakan orang berkembang tanpa masalah ini sebagian besar waktu.
Sean Houlihane
20

Itu tergantung pada apa yang Anda coba lakukan.

  1. Kesenjangan terbesar adalah bahwa mikrokontroler yang Anda sebutkan (seperti Arduino) tidak menjalankan sistem operasi multitasking seperti Linux. Ini berarti jika aplikasi Anda bergantung pada multitasking atau multithreading, ini mungkin jauh lebih sulit atau bahkan tidak mungkin dijalankan di Arduino.

  2. Kesenjangan kedua adalah dukungan perangkat keras. Misalnya, Raspberry Pi mendukung kamera, audio USB, ethernet, WiFi di luar kotak. Tidak ada yang didukung secara langsung oleh Arduino, dan walaupun Anda dapat menggunakan berbagai perisai (seperti USB Host, Ethernet atau WiFi), menggunakannya tidak semudah menggunakan jaringan di Raspberry Pi.

  3. Kesenjangan ketiga adalah sumber daya yang tersedia. Sebagian besar mikrokontroler tidak mendekati sumber daya yang ditawarkan Raspberry Pi. Sebagai contoh, bahkan Raspberry Pi pertama menawarkan CPU yang berjalan pada 700MHz dengan 256Mb RAM dan dapat digunakan dengan penyimpanan 32Gb. Arduino Uno yang khas berdasarkan ATMEGA328 berjalan pada 16MHz, dan memiliki penyimpanan 32Kb dan RAM 2Kb.

Jadi menggunakan Raspberry Pi jelas jauh lebih mudah bagi pengembang yang datang dari PC. Keuntungan utama menggunakan mikrokontroler adalah:

  • biaya (klon Cina dari Arduino Nano harganya kurang dari $ 2 per satuan pengiriman)
  • konsumsi daya (mikrokontroler dapat dioptimalkan dengan sangat baik untuk konsumsi daya rendah - penting jika Anda harus menggunakan baterai);
  • ketersediaan waktu nyata, yaitu kemampuan untuk bereaksi terhadap perubahan sinyal secara waktu nyata;
  • ukuran (Arduino Mini dua kali lebih sempit dari Raspberry Pi Zero, dan jika Anda tidak membutuhkan banyak pin, ukuran ATTINY85 kurang dari satu sen, dan itu bekerja tanpa kristal).

Jika tidak ada yang penting, menggunakan Raspberry Pi jelas lebih masuk akal.

George Y.
sumber
3
Daya baterai, dan tidak ada kebutuhan sumber daya yang besar adalah driver untuk menggunakan MCU - jadi saya mengasumsikan prosesor 10-100 MHz sudah cukup. Poin valid menggunakan periferal, meskipun SPI mungkin setara dengan mcu USB.
Sean Houlihane
2
Memiliki bis saja tidak cukup. Pertimbangkan untuk menggunakan WiFi di Linux, aplikasi Anda tidak memerlukan pengetahuan khusus tentangnya, kode yang sama yang bekerja dengan Ethernet akan bekerja dengan antarmuka WiFi. Ini bukan masalahnya dengan mikrokontroler, Anda harus menggunakan pustaka yang berbeda, mempelajari cara menggunakannya, dan mengubah kode.
George Y.
1
OK, tidak menyadari bahwa menggunakan perpustakaan yang berbeda akan menjadi penghalang.
Sean Houlihane
2
Jika Anda tidak membutuhkan banyak pin, Anda bisa mendapatkan ATtiny4 yang seukuran sebutir beras: P
Nick T
1
itu rupanya tidak jauh lebih kecil dari Attiny85 :) tapi Anda benar, jika kita berpikir non-DIP, bahkan 85 adalah ujung jari.
George Y.
9

YA, ini adalah lompatan besar dari pemrograman dengan Python ke pemrograman menggunakan alat bahasa berbasis C pada mikrokontroler. Bahkan, dalam banyak kasus Anda mungkin perlu menulis beberapa, jika tidak semua, aplikasi Anda dalam bahasa assembly.

Seperti yang sudah ditunjukkan dalam jawaban lain, mikro-controller sangat terbatas sumber daya dan dengan demikian Anda kehilangan semua kenyamanan sistem operasi Linux dan semua alat yang dapat Anda jalankan secara lokal. Iterasi dengan Arduino IDE sangat lambat dibandingkan dengan menjalankan skrip lokal.

Walaupun saya memiliki banyak pengalaman profesional dengan mikrokontroler dan mikroprosesor, saya lebih suka menjalankan proyek pribadi saya menggunakan perangkat keras RPi dengan beberapa Arduino untuk hal-hal kritis real-time. Saya juga mencoba-coba Beagle Bone Black dan dalam beberapa hal lebih nyaman daripada menggunakan RPi dengan satu atau lebih Arduino.

CyberFonic
sumber
9

Ya, perbedaan besar

Perbedaannya seperti siang dan malam, baik dalam hal perangkat keras dan perangkat lunak. Tidak ada perbandingan yang valid sama sekali.

Kapan harus menggunakan yang mana

Gunakan Arduino, jika ...

  • Keterbatasan ruang membuat Pi tidak layak.
  • Penggunaan daya Pi akan terlalu banyak.
  • Uang adalah masalah (terutama jika Anda memerlukan beberapa atau beberapa pengontrol individu dalam proyek Anda, masing-masing melakukan logika yang sangat sederhana saja).
  • Anda ingin mendapatkan seluk-beluk dan bekerja pada tingkat yang jauh lebih rendah untuk bersenang-senang atau untuk mendapatkan pengetahuan.
  • Anda memerlukan kesederhanaan ekstrem dan / atau 100% perilaku real-time yang didefinisikan dan tidak ada kesempatan bahwa sesuatu di luar kendali Anda membunuh program Anda.
  • Anda tidak memerlukan ethernet, fungsi USB-host yang sulit (yaitu mengakses hard drive; menggunakannya di sisi klien, misalnya sebagai perangkat HID, tidak masalah) dan seterusnya. Sebagian besar dapat dipasang ke Arduino (verrry slooowly), tetapi dengan biaya tinggi dalam hal RAM / EPROM dan juga fungsionalitas. Karena tidak ada multitasking preemptive, tugas unblocking menjadi sangat rumit dengan sangat cepat.
  • Anda baik-baik saja dengan IDE pengembangan Arduino yang sederhana, atau dengan menggali lebih dalam (mis., Membangun program sendiri), dan - jika Anda tidak menggunakan perangkat USB-upload seperti Pro Micro - kit pengembangan yang dibeli atau dibuat sendiri /pembakar.

Dalam semua kasus lain, Pi jauh lebih ramah pengguna. Pi hanyalah komputer (lambat) lainnya.

Jangan salah sangka. Saya memiliki Pi dan menggunakannya untuk beberapa layanan Linux di jaringan saya. Saya juga sering memprogram Arduinos (kebanyakan Pro Micros). Keduanya hebat, saya suka mereka sama, tetapi mereka memiliki skenario penggunaan yang sangat berbeda.

Pada pertanyaan Anda tentang kesulitan - itu relatif. Satu-satunya saat Arduino menjadi sulit bagi saya adalah sulit untuk men-debug masalah waktu, terutama jika dikombinasikan dengan elektronik yang dipertanyakan (yaitu, gangguan EM, kabel terlalu panjang dll). Jika Anda tegas dalam bahasa pilihan Anda (yaitu, C untuk Arduino IDE), maka Anda harus dapat meretas perpustakaan apa pun yang Anda gunakan. Namun, itu akan selalu lebih kompleks daripada Pi, di mana Anda dapat misalnya menggunakan bahasa scripting pilihan Anda untuk hal-hal non-waktu-kritis - yang akan selalu lebih mudah untuk dikembangkan dan di-debug.

AnoE
sumber
Saya tidak bertanya mana platform pengembangan terbaik - kasus penggunaan saya membutuhkan MCU, terutama karena kendala daya. Saya melihat pertanyaannya tidak terlalu jelas tentang hal ini.
Sean Houlihane
Baiklah, maka bagian pertama dari jawaban sudah cukup. Saya akan membiarkan sisanya berdiri sebagai "tambahan" jika Anda suka.
AnoE
7

Saya percaya ada beberapa poin yang belum ditentukan secara eksplisit.

Lingkungan pengembangan benar-benar berbeda. Anda benar-benar dapat mengembangkan perangkat lunak Pi PADA Pi — Anda bahkan dapat menggunakan GUI jika mau. Ada alat debugging canggih yang sudah ada di dalamnya — juga banyak sekali apa yang tersedia untuk sistem komputer mana pun.

Kontroler harus dikembangkan / ditiru pada komputer yang terpisah kemudian dikirim ke controller untuk pengujian akhir.

Pi dapat menjalankan hampir semua bahasa yang Anda inginkan untuk memprogramnya, pengontrol mikro biasanya memiliki satu atau dua.

Pi dapat menjalankan beberapa sistem operasi (termasuk windows IoT dan banyak sistem khusus), pengendali tertanam cenderung tidak menjalankan "Sistem Operasi" sama sekali.

Sejauh runtime / OS berjalan — Pi membutuhkan waktu beberapa detik untuk boot — jika Anda ingin benar-benar melakukan sesuatu dalam beberapa detik pertama maka pi tidak akan bekerja untuk Anda. Juga, kecuali Anda pergi ke beberapa langkah ekstrem untuk mencegah penulisan ke penyimpanan apa pun, Anda benar-benar tidak boleh hanya menghilangkan daya, Anda harus menjalankan "Shutdown" dan menunggu sedikit. Ini juga dapat membatasi beberapa penggunaan.

Poin pasca penempatan lain yang belum saya lihat disebutkan. Saya tidak yakin bagaimana saya akan benar-benar yakin bahwa saya telah mendapatkan Pi dengan benar — bahwa tidak ada agensi yang menempelkan sedikit kode di suatu tempat yang memungkinkan akses tidak sah dalam keadaan tertentu — tanpa menghapusnya dari semua jaringan dan menonaktifkan semua mekanisme akses nirkabel . Pengontrol mikro cukup mudah untuk diamankan karena Anda menulis hampir semua kode yang berjalan pada benda itu.

Tentu saja, Anda selalu dapat mengembangkan gambar Pi Anda sendiri tanpa OS nyata dan mengambil alih seluruh papan / CPU yang akan membuatnya menjadi pengontrol mikro yang sangat kuat / mahal dengan semua kelebihan / kekurangan terkait. Seseorang mungkin sudah melakukan ini, tetapi saya belum mencari hal seperti itu belakangan ini.

Bill K
sumber
WRT paragraf terakhir Anda, ya, itu disebut bare-metal dan hanya sedikit orang yang melakukannya tetapi secara teknis itu mungkin ... selamat datang di situs ini!
Ghanima
3

Perbedaan antara mengembangkan aplikasi dengan Pi dapat sangat berbeda atau agak mirip dengan mengembangkan aplikasi dengan mikrokontroler karena perbedaan perangkat keras serta perbedaan pengembangan perangkat rantai alat.

Ada berbagai macam mikrokontroler yang tersedia di mana saja dari prosesor 8 bit hingga 64 bit dan memiliki mulai dari beberapa K RAM hingga beberapa gigabytes RAM. Mikrokontroler yang lebih mampu memberikan pengalaman seperti Pi. Mikrokontroler yang kurang mampu tidak.

Dan bahkan dengan Pi ada perbedaan besar antara pengembangan untuk sistem operasi Windows 10 IoT versus pengembangan untuk Raspian, Mate, atau OS berbasis Linux lainnya. Windows 10 IoT memerlukan PC pengembangan menggunakan Visual Studio toolchain dengan debugger jarak jauh yang menargetkan lingkungan Universal Windows Program (UWP). Pengembangan untuk Raspian atau Mate sebenarnya dapat dilakukan pada Pi dengan alat yang tersedia di Pi.

The Dibatasi Application Protocol digunakan untuk, perangkat dibatasi kecil yang digunakan dengan Internet lingkungan Hal. Untuk mendapatkan gambaran tentang beragam perangkat keras dan perangkat lunak mikrokontroler, halaman tentang implementasi protokol CoAP ini memberikan gambaran tentang lingkungan yang ditargetkan. Disebutkan sistem operasi Contiki yang samar-samar saya dengar bersamaan dengan OS yang lebih dikenal seperti iOS, OSX, dan Android. Bahasa pemrograman yang disebutkan adalah Java, JavaScript, C, C #, Ruby, Go, Erlang, Rust, dan Python.

Rantai alat yang digunakan untuk pengembangan dengan mikrokontroler bervariasi tergantung pada pabrikan serta jenis sumber daya apa yang tersedia dari komunitas pengembangan dan inisiatif sumber terbuka. Dalam beberapa kasus Anda mendapatkan assembler silang, dalam kasus lain Anda mendapatkan compiler C cross, dan dalam kasus lain Anda mendapatkan rantai alat yang bagus dengan semua bel dan peluit dan emulator dan sejenisnya dengan Visual Studio toolchain untuk Windows 10 IoT.

Lingkungan pengembangan aktual untuk mikrokontroler dapat melibatkan penggunaan programmer EEPROM dan perangkat lunak untuk membuat gambar baru dan mendorongnya ke perangkat atau perangkat mungkin memiliki konektivitas yang diperlukan untuk memungkinkan gambar baru untuk diunduh melalui koneksi serial atau lebih koneksi jaringan.

Kesan saya adalah bahwa sebagian besar mikrokontroler memiliki kompiler lintas C meskipun kompiler hanya dapat mendukung standar yang lebih lama seperti K&R atau mungkin C98. Kompiler silang C sering kali memiliki kata kunci non-standar untuk fitur spesifik mikroprosesor misalnya fardan nearkata kunci untuk pointer dengan prosesor 8080 dan 8086 lama dengan memori tersegmentasi.

Ada juga bahasa khusus yang menargetkan mikrokontroler seperti bahasa pemrograman FORTH . Bahasa-bahasa ini sering memiliki desain run time yang menargetkan bare metal sehingga tidak ada sistem operasi selain bahasa run time.

Sistem operasi dapat berkisar dari yang praktis tidak ada hingga Linux yang telanjang hingga OS khusus seperti freeRTOS atau Windows Embedded atau Linux yang penuh sesak atau Microsoft Windows. Lihat proyek SourceForge ini MINIBIAN untuk Raspberry Pi . Lihat juga eBuku ini, Baking Pi: Pengembangan Sistem Operasi yang menjelaskan pengembangan OS yang belum sempurna untuk Raspberry Pi dalam assembler.

Artikel dari Majalah Visual Studio ini, Memprogram Internet of Things with Visual Studio , memberikan tinjauan tentang berbagai perangkat yang tersedia diikuti dengan tinjauan umum menggunakan Visual Studio IDE untuk pengembangan untuk Linux dan juga Windows.

Ada perangkat mikrokontroler off-the-shelf, diprogram, jaringan yang tumbuh dan besar yang tersedia sekarang. Pada level yang sangat rendah, Anda memiliki berbagai perangkat 16-dan 32-bit sederhana dari berbagai pembuat chip tradisional seperti Texas Instruments. (Saya bermain sedikit dengan kit pengembangan SensorTag dan itu sangat menyenangkan, membuat saya berpikir Watch DevPack mungkin juga merupakan perangkat pembelajaran yang hebat.)

Beberapa perangkat mikrokontroler yang lebih terkenal termasuk Arduino, BeagleBoard dan Raspberry Pi. Semua lingkungan ini memiliki dukungan komunitas yang luas dan siap dipasang ke sejumlah besar sensor eksternal siap pakai, motor, servo dan apa pun yang Anda bayangkan. Adafruit, superstore pembelajaran elektronik yang didirikan oleh Limor "Ladyada" Fried, menyediakan segala jenis periferal untuk papan ini, bersama dengan lini papan pengembangan bulu ringannya sendiri.

...

Semesta perangkat yang paling menarik bagi pengembang yang akrab dengan Microsoft .NET Framework dan Visual Studio mungkin adalah lingkungan yang kompatibel dengan Windows 10 IoT Core. Ini adalah perangkat bertenaga x86 dan ARM yang mendukung aplikasi Universal Windows Platform (UWP) yang ditulis dalam berbagai bahasa termasuk C #, Visual Basic, Python, dan Node.js / JavaScript. Inti Windows 10 IoT mendukung perangkat termasuk Raspberry Pi, Arrow DragonBoard 410C, Intel Joule dan Compute Stick dan MinnowBoard. Ada juga platform produk yang menarik, seperti Askey TurboMate E1 wearable.

Contoh spesifik aplikasi Mikrokontroler

Ini adalah gambar papan mikrokontroler dari pembuat kopi otomatis. Ini tampaknya menjadi komponen standar untuk pembuat kopi otomatis yang diproduksi di Cina. Situs web untuk pabrikan dicetak pada PCB.

Gambar terdiri dari dua tampilan. Tampilan di sebelah kiri adalah bagian belakang papan yang berisi mikrokontroler dan sirkuit pendukung. Tampilan di sebelah kanan adalah bagian depan papan dengan layar LCD dan satu set tombol yang digunakan untuk mengatur waktu saat ini dan untuk melakukan tindakan seperti pemrograman waktu mulai, dll.

Tampilan di sebelah kanan cocok dengan pembawa yang kemudian pas ke lubang di depan pembuat kopi. Sakelar pada PCB bawah digerakkan dengan sakelar rocker arm. LCD, yang tampaknya menjadi tujuan khusus, digunakan untuk menampilkan waktu dan status saat ini serta untuk menampilkan antarmuka pengguna saat mengubah pengaturan pembuat kopi. LED merah digunakan untuk menunjukkan kapan pembuat kopi benar-benar membuat kopi dan untuk menunjukkan kapan dilakukan dengan mematikan kembali iluminasi.

masukkan deskripsi gambar di sini

Mikrokontroler adalah ELAN Microelectronics Corp EM78P447NAM (lembar data) yang merupakan mikrokontroler 8 bit. Beberapa statistik dasar menunjukkan betapa kecil dan minimalnya perangkat ini, namun berfungsi baik untuk tujuan yang dimaksudkan. Tujuannya adalah untuk mengembangkan perangkat lunak yang kemudian diunduh ke ROM sekali tulis sebagai bagian dari manufaktur.

• Konsumsi daya rendah:

* Less then 2.2 mA at 5V/4MHz

* Typically 35 µA, at 3V/32KHz

* Typically 2 µA, during sleep mode

• 4K × 13 bit pada chip ROM

• Tiga bit proteksi untuk mencegah intrusi kode memori OTP

• Satu register konfigurasi untuk mengakomodasi kebutuhan pengguna

• 148 × 8 bit pada register chip (SRAM, register tujuan umum)

Richard Chambers
sumber
2
Saya tidak berpikir ini menjawab pertanyaan itu. Tentu, beberapa produk tidak dikemas dengan baik, tetapi itu berlaku untuk SBC juga.
Sean Houlihane
1
@SHeHoulihane apa yang saya coba lakukan dengan jawaban ini adalah untuk memberikan sudut pandang mikrokontroler pada pertanyaan, khususnya bahwa ada berbagai perangkat yang memenuhi label mikrokontroler. Ada lebih banyak ke lanskap OS dari Linux dan ada lebih banyak ke bahasa pemrograman dari python atau C.
Richard Chambers
1
Bagi saya, Anda hanya mengatakan dunia MCU berantakan. Yang saya rasa menyesatkan.
Sean Houlihane
1
@SeanHoulihane Saya minta maaf bahwa kesan Anda dari posting saya adalah bahwa dunia MCU berantakan. Interpretasi lain adalah bahwa dunia MCU adalah salah satu dari banyak alternatif dan peluang yang luar biasa namun pembaca membawa bias dan prasangka mereka sendiri pada narasi apa pun.
Richard Chambers