Pi의 프로토 타이핑과 마이크로 컨트롤러 사용 사이에 큰 도약이 있습니까?


25

질문 은 무엇보다도 Raspberry Pi에서 Python을 사용하여 엔드 포인트 프로토 타입을 만드는 것과 마이크로 컨트롤러를 사용하는 것 사이에 큰 학습 곡선 이 있는지 묻습니다.

프로세서 처리량 감소로 전력 소비가 크게 개선되었으므로 배터리로 전력을 공급해야하는 제품에 MCU 접근 방식을 적용해야 할 이유가 있습니다.

Linux를 실행하는 단일 보드 컴퓨터를 사용하는 잠재적 인 이유 중 하나는 응용 프로그램을 높은 수준의 언어로 작성할 수 있다고 가정 할 때 (파이썬 또는 이와 유사한) 배울 새로운 소프트웨어가 없기 때문입니다 (많은 표준이 있어야 함) 라이브러리).

임베디드 개발 플랫폼에서 가능한 선택은 C ++ (mbed 또는 arduino) 또는 micropython입니다. 필자는 플랫폼에서 개별적인 이점이 있지만 Linux에서 실행할 코드를 작성하는 것과 크게 다르거 나 복잡하지 않다는 인상을 받았습니다. 소프트웨어 개발자와 관련된 것을 놓친 적이 있습니까?

특히, IoT 엔드 포인트에 대해 질문하고 있으므로 여기서 관심이있는 애플리케이션을 위해 Linux 시스템의 전체 리소스를 보유 할 필요는 없습니다. 전력 및 대기 시간을 고려하여 이러한 유형의 애플리케이션에서 mcu 구현을 어려운 요구 사항으로 만든다는 점도 강조 할 가치가 있습니다.

답변:


12

에 추가 조지의 광범위한 대답 과 점 2) 하드웨어 지원. 원하는 하드웨어 (예 : 이더넷, WiFi, SD 카드)가 쉴드 또는 유사한 확장 보드를 통해 마이크로 컨트롤러 / Arduino에 추가 되더라도이를 작동하는 라이브러리는 작은 메모리 (예 : ATMEGA328 (일반적인 Arduino 컨트롤러)에 상당한 부담을줍니다. 32Kb의 FLASH와 2Kb의 RAM이 있습니다. 특히 여러 기능 (네트워킹, 디스플레이, SD 카드)을 결합 할 때 이는 심각한 제한이 될 수 있습니다.

Arduino 세계의 몇 가지 예 :

SD 카드 및 단순 파일 시스템 (FAT) 지원 :

  • SD 카드 (코드 크기를 알 수 있지만 가능성이 하드웨어 SPI를 사용하는 경우 큰 문제는하지 않는 것이), 적어도 512 RAM 버퍼 바이트
  • Petit FAT FS 는 ~ 2..4kB FLASH 및 ~ 44 바이트의 RAM이 필요합니다.

매트릭스 디스플레이 사용 :

TCP / IP 프로토콜 스택이있는 이더넷 :

  • uIP : 일반적인 패킷 크기 (> 1 kB) 범위의 RAM 요구 사항이지만 단일 칩 이더넷 컨트롤러에는 일반적으로 최대 크기의 이더넷 프레임을 수용 할 수있는 온칩 버퍼가 제공됩니다.

    최소 200 바이트의 RAM으로 uIP 구현을 실행할 수 있지만 이러한 구성은 처리량이 매우 낮으며 적은 수의 동시 연결 만 허용합니다. ( 출처. )

  • Arduino 용 TCP 및 UDP 프로토콜을 사용하는 IP 스택 : 최소 128kB 외부 메모리

  • 직렬 인터페이스 IP : SerialIP ~ 9 kB FLASH 및 "충분한" RAM

대체로 이러한 제한이있는 프로그래밍에는 프로그램 공간 및 코드 크기 (FLASH), 런타임 데이터 (RAM) 및 실행 속도와 관련하여 매우 다른 접근 방식과 최적화가 필요합니다. 이 답변 은 훌륭하게 완성되었습니다.

질문은 mbed 플랫폼에 대해 구체적으로 묻는 것처럼 IoT와 관련성이 가장 높은 기능, 즉 연결, 암호화, 인증 및 권한 부여를 포함한다는 점은 주목할 만합니다. 저전력 무선 개인 영역 네트워크를 통한 Bluetooth 저에너지 및 IPv6의 하드웨어 지원을 제공합니다. 이러한 연결 기능은 일반적으로> = 128 kB FLASH 및> = 16 kB RAM을 가진 나열된 개발 보드 에서만 사용할 수 있습니다 . 반면에 더 작은 개발 보드에는 전용 연결이없는 16KB 플래시, 4KB RAM (즉, 중간 크기의 Arduino)를 지원하는 ARM Cortex-M0 + 코어만큼 작은 마이크로 컨트롤러를 갖춘 시스템이 포함됩니다.


리소스 제약은 내 가정에서 가장 큰 격차였습니다. 대부분의 사람들은 대부분 이러한 문제없이 개발한다는 사실을 잊기 쉽습니다.
Sean Houlihane

20

당신이하려는 일에 달려 있습니다.

  1. 가장 큰 격차는 언급 한 마이크로 컨트롤러 (예 : Arduino)가 Linux와 같은 멀티 태스킹 운영 체제를 실행하지 않는다는 것입니다. 이는 애플리케이션이 멀티 태스킹 또는 멀티 스레딩에 의존하는 경우 Arduino에서 실행하기가 훨씬 어렵거나 불가능할 수도 있음을 의미합니다.

  2. 두 번째 차이는 하드웨어 지원입니다. 예를 들어, Raspberry Pi는 카메라, USB 오디오, 이더넷, WiFi를 기본적으로 지원합니다. 그 중 어느 것도 Arduino에서 직접 지원하지 않으며 다양한 쉴드 (예 : USB 호스트, 이더넷 또는 WiFi)를 사용할 수 있지만 Raspberry Pi의 네트워킹을 사용하는 것만 큼 간단하지는 않습니다.

  3. 세 번째 차이는 사용 가능한 리소스입니다. 대부분의 마이크로 컨트롤러는 Raspberry Pi가 제공하는 리소스에 가깝지 않습니다. 예를 들어, 최초의 Raspberry Pi조차도 256Mb의 RAM으로 700MHz에서 실행되는 CPU를 제공했으며 32Gb의 스토리지와 함께 사용할 수있었습니다. ATMEGA328에 기반한 전형적인 Arduino Uno는 16MHz에서 실행되며 32Kb의 스토리지와 2Kb의 RAM이 있습니다.

따라서 PC에서 온 개발자에게는 Raspberry Pi를 사용하는 것이 훨씬 쉽습니다. 마이크로 컨트롤러 사용의 주요 장점은 다음과 같습니다.

  • 비용 (아두 이노 나노의 중국 클론은 배송비가 $ 2 미만입니다)
  • 전력 소비 (마이크로 컨트롤러는 전력 소모가 적을 때 실제로 최적화 될 수 있음-배터리로 실행해야하는 경우 중요 함);
  • 실시간 가용성, 즉 실시간 신호 변화에 반응하는 능력;
  • 사이즈

그중 어느 것도 중요하지 않으면 Raspberry Pi를 사용하는 것이 더 합리적입니다.


3
배터리를 사용하고 리소스를 많이 요구하는 것은 mcu를 사용하는 드라이버가 아니므로 10-100MHz 프로세서로 충분하다고 가정합니다. SPI는 아마도 USB와 동일한 mcu이지만 주변 장치 사용에 대한 유효한 요점입니다.
Sean Houlihane

2
버스 만 있으면 충분하지 않습니다. Linux에서 WiFi를 사용하는 것을 고려하면 앱에 대한 특정 지식이 필요하지 않습니다. 이더넷에서 작동하는 동일한 코드가 WiFi 인터페이스에서 작동합니다. 이것은 마이크로 컨트롤러의 경우가 아니며, 다른 라이브러리를 사용하고, 사용 방법을 배우고, 코드를 변경해야합니다.
George Y.

1
다른 라이브러리를 사용하는 것이 많은 장애물이 될 것임을 알지 못했습니다.
Sean Houlihane

2
핀이 많지 않으면 쌀 한 알 크기의 ATtiny4를 얻을 수 있습니다. : P
Nick T

1
Attiny85 :)보다 훨씬 작지는 않지만 DIP가 아닌 것으로 생각한다면 85도 손가락 끝입니다.
George Y.

9

예, 파이썬 프로그래밍에서 마이크로 컨트롤러의 일반적인 C 기반 언어 도구를 사용한 프로그래밍으로의 큰 도약입니다. 실제로, 대부분의 경우 어셈블리 언어로 응용 프로그램의 일부를 작성해야 할 수도 있습니다.

다른 답변에서 이미 지적했듯이 마이크로 컨트롤러는 리소스가 많이 제한되어 있으므로 Linux 운영 체제의 모든 편의성과 로컬에서 실행할 수있는 모든 도구가 손실됩니다. Arduino IDE를 사용한 반복은 로컬 스크립트를 실행하는 것에 비해 매우 느립니다.

마이크로 컨트롤러 및 마이크로 프로세서에 대한 많은 전문적인 경험이 있지만, 실시간으로 중요한 부분을 위해 Arduino와 함께 RPi 하드웨어를 사용하여 개인 프로젝트를 실행하는 것을 선호합니다. 나는 또한 Beagle Bone Black을 다루었 고 어떤면에서는 하나 이상의 Arduino와 함께 RPi를 사용하는 것보다 편리합니다.


9

예, 큰 차이

하드웨어와 소프트웨어의 차이는 낮과 밤과 같습니다. 전혀 유효한 비교가 없습니다.

사용시기

다음과 같은 경우 Arduino를 사용하십시오.

  • 공간 제약으로 인해 Pi는 불가능합니다.
  • Pi의 전력 사용량이 너무 많습니다.
  • 돈은 문제입니다 (특히 프로젝트에 여러 개 또는 여러 개의 개별 컨트롤러가 필요한 경우 각각 매우 간단한 논리 만 수행함).
  • 재미 있고 지식을 얻기 위해 단정하고 빡빡하고 훨씬 낮은 수준에서 일하고 싶습니다.
  • 극도의 단순성 및 / 또는 100 % 정의 된 실시간 동작이 필요하며 제어 할 수없는 무언가로 인해 프로그램이 종료 될 가능성이 없습니다.
  • 이더넷, 어려운 USB 호스트 기능이 필요하지 않습니다 (즉, 하드 드라이브 액세스, 클라이언트 측에서 HID 장치로 사용하는 것 등). 이들 중 대부분은 Arduino (매우 느슨하게)에 장착 할 수 있지만 RAM / EPROM 및 기능면에서 높은 비용으로 제공됩니다. 선점 형 멀티 태스킹이 없기 때문에 차단 해제 작업이 매우 복잡해집니다.
  • 간단한 Arduino 개발 IDE 또는 훨씬 더 깊이 파고 들어 (예 : 직접 프로그램 구축), Pro Micro와 같은 USB 업로드 장치를 사용하지 않을 경우 구매 또는 자체 개발 키트 /연소기.

다른 모든 경우에 Pi는 훨씬 더 사용자 친화적입니다. Pi는 단순히 다른 (느린) 컴퓨터입니다.

내가 틀리지 마 Pi를 소유하고 있으며 네트워크의 여러 Linux 서비스에 사용합니다. 나는 또한 자주 Arduinos (Pro Micros 주로)를 프로그래밍합니다. 둘 다 훌륭하지만 나는 똑같지 만 사용법 시나리오가 매우 다릅니다.

어려움에 대한 귀하의 질문에-그것은 상대적입니다. Arduino가 나에게 어려움을 겪었던 유일한 시점은 타이밍 문제를 디버깅하기 어려웠습니다. 특히 의심스러운 전자 장치 (예 : EM 간섭, 너무 긴 케이블 등)와 결합 된 경우. 선택한 언어를 잘 알고 있다면 (예 : Arduino IDE의 경우 C) 사용중인 라이브러리를 해킹 할 수 있어야합니다. 사람들은 것이다 - 그러나 항상 다음 예를 들어 비 타이밍이 중요한 일에 대한 당신의 선택의 스크립트 언어를 사용할 수있는 파이, 더 복잡 할 것이다 항상 더 쉽게 개발 및 디버깅합니다.


최고의 개발 플랫폼이 무엇인지 묻지 않습니다. 사용 사례 에는 주로 전력 제한으로 인해 MCU 가 필요 합니다. 나는이 시점에서 질문이 너무 명확하지 않다는 것을 알았습니다.
Sean Houlihane

그럼 대답의 첫 부분으로 충분합니다. 원한다면 나머지는 "부록"으로 세워 두겠습니다.
AnoE

7

아직 명시 적으로 지정되지 않은 몇 가지 사항이 있다고 생각합니다.

개발 환경은 완전히 다릅니다. 실제로 Pi에서 Pi 소프트웨어를 개발할 수 있습니다. 원하는 경우 GUI를 사용할 수도 있습니다. 모든 컴퓨터 시스템에서 사용할 수있는 엄청나게 많은 고급 디버깅 도구가 내장되어 있습니다.

컨트롤러는 별도의 컴퓨터에서 개발 / 에뮬레이션 한 다음 최종 테스트를 위해 컨트롤러로 전송해야합니다.

Pi는 프로그래밍하려는 거의 모든 언어를 실행할 수 있으며 마이크로 컨트롤러에는 일반적으로 하나 또는 두 개가 있습니다.

Pi는 꽤 많은 운영 체제 (Windows IoT 및 여러 특수 시스템 포함)를 실행할 수 있으며 내장 컨트롤러는 "운영 체제"를 전혀 실행하지 않는 경향이 있습니다.

또한 런타임 / OS가 진행되는 한 Pi는 부팅하는 데 몇 초가 걸립니다. 실제로 처음 몇 초 안에 무언가를 수행하려면 pi가 작동하지 않습니다. 또한 스토리지에 대한 쓰기를 막기 위해 극단적 인 조치를 취하지 않는 한 실제로 전원을 끄는 것이 아니라 "종료"를 실행하고 조금 기다려야합니다. 또한 일부 사용이 제한 될 수 있습니다.

내가 언급하지 않은 또 다른 배치 후 포인트. 모든 네트워크에서 코드를 제거하고 모든 무선 액세스 메커니즘을 비활성화하지 않고 특정 환경에서 무단 액세스를 허용하는 코드를 어떤 기관도 고수하지 않은 Pi를 올바르게 보호했는지 어떻게 확신하는지 잘 모르겠습니다. . 마이크로 컨트롤러는 거의 모든 코드를 작성하기 때문에 보안이 매우 쉽습니다.

물론, 당신은 항상 실제 OS없이 자신 만의 Pi 이미지를 개발할 수 있고 보드 / CPU 전체를 차지할 수 있습니다. 이것은 모든 관련 장점 / 단점을 갖춘 강력한 강력한 / 비싼 마이크로 컨트롤러로 만들 것입니다. 누군가 이미이 작업을 수행했을 수도 있지만 요즘에는 그런 것을 찾지 못했습니다.


마지막 단락 인 WRT입니다. 예를 들어 베어 메탈 (bare-metal) 이라고하는 사람은 거의 없지만 기술적으로 가능합니다. 사이트에 오신 것을 환영합니다!
가니 마

3

Pi로 애플리케이션을 개발하는 것의 차이는 소프트웨어 개발 툴체인의 차이뿐만 아니라 하드웨어 차이로 인해 마이크로 컨트롤러로 애플리케이션을 개발하는 것과 매우 다르거 나 다소 유사 할 수 있습니다.

8 비트에서 64 비트 프로세서에 이르기까지, 몇 K의 RAM에서 몇 기가 바이트의 RAM에 이르는 광범위한 마이크로 컨트롤러가 있습니다. 더 유능한 마이크로 컨트롤러는보다 Pi 같은 경험을 제공합니다. 성능이 떨어지는 마이크로 컨트롤러는 그렇지 않습니다.

Pi를 사용하더라도 Windows 10 IoT 운영 체제 개발과 Raspian, Mate 또는 기타 Linux 기반 OS 개발과는 큰 차이가 있습니다. Windows 10 IoT에는 UWP (Universal Windows Program) 환경을 대상으로하는 원격 디버거가 포함 된 Visual Studio 툴체인을 사용하는 개발 PC가 필요합니다. Pi에서 사용 가능한 도구를 사용하여 Pi에서 Raspian 또는 Mate의 개발을 실제로 수행 할 수 있습니다.

제한된 응용 프로그램 프로토콜은 작고 제한된 장치가 가지 환경의 인터넷과 사용을 위해 사용된다. 다양한 마이크로 컨트롤러 하드웨어 및 소프트웨어에 대한 아이디어를 얻기 위해 CoAP 프로토콜 구현 에 대한이 페이지 는 대상 환경에 대한 아이디어를 제공합니다. iOS, OSX 및 Android와 같은 잘 알려진 OS와 함께 모호하게 들었던 Contiki 운영 체제에 대해 언급합니다 . 언급 된 프로그래밍 언어는 Java, JavaScript, C, C #, Ruby, Go, Erlang, Rust 및 Python입니다.

마이크로 컨트롤러 개발에 사용되는 툴 체인은 제조업체 및 개발 커뮤니티 및 오픈 소스 이니셔티브에서 사용할 수있는 리소스 종류에 따라 다릅니다. 어떤 경우에는 크로스 어셈블러를, 다른 경우에는 C 크로스 컴파일러를 얻거나, 다른 경우에는 모든 종소리와 휘파람 및 에뮬레이터를 사용하여 Windows 10 IoT 용 Visual Studio 도구 체인과 유사한 멋진 도구 체인을 얻습니다.

마이크로 컨트롤러의 실제 개발 환경에는 EEPROM 프로그래머와 소프트웨어 도구를 사용하여 새 이미지를 만들어 장치로 푸시하거나 장치가 직렬 연결 또는 새 연결을 통해 새 이미지를 다운로드 할 수 있도록 필요한 연결성을 가질 수 있습니다. 네트워크 연결.

필자는 컴파일러가 K & R 또는 C98과 같은 구형 표준 만 지원할 수 있지만 대부분의 마이크로 컨트롤러에는 C 크로스 컴파일러가 있다고 생각합니다. 마이크로 프로세서의 특정은 예를 들어, 기능에 대한 C 크로스 컴파일러는 종종 표준이 아닌 키워드가 far하고 near자신의 세그먼트 메모리와 기존의 8080 개 8086 프로세서 포인터 키워드를.

FORTH 프로그래밍 언어 와 같은 마이크로 컨트롤러를 대상으로하는 특수 언어도 있습니다 . 이러한 언어는 종종 베어 메탈을 대상으로하는 런타임 디자인을 가지므로 언어 ​​런타임 이외의 운영 체제는 없습니다.

운영 체제의 범위는 실제 존재하지 않는 Linux에서 베어 본 Linux에 이르기까지 freeRTOS 또는 Windows Embedded 와 같은 특수 OS 또는 완전한 Linux 또는 Microsoft Windows에 이르기까지 다양 합니다. Raspberry Pi 용이 SourceForge 프로젝트 MINIBIAN을 참조하십시오 . 또한이 eBook, Baking Pi : 운영 체제 개발 을 참조하십시오 . 어셈블러에서 Raspberry Pi의 기본 OS 개발에 대해 설명합니다.

Visual Studio를 사용 하여 사물 인터넷을 프로그래밍하는 Visual Studio Magazine의이 기사에서는 사용 가능한 여러 장치에 대한 개요와 Windows 및 Linux 용 Visual Studio IDE 사용에 대한 개요를 제공합니다.

현재 상용화되고 프로그래밍 가능하며 네트워크로 연결 가능한 마이크로 컨트롤러 장치가 엄청나게 늘어나고 있습니다. 매우 낮은 수준에서는 Texas Instruments와 같은 다양한 기존 칩 제조업체의 다양한 간단한 16 비트 및 32 비트 장치가 있습니다. (SensorTag 개발 키트로 약간의 연주를했으며 많은 재미가 있기 때문에 Watch DevPack도 훌륭한 학습 도구 세트라고 생각합니다.)

잘 알려진 마이크로 컨트롤러 장치로는 Arduino, BeagleBoard 및 Raspberry Pi가 있습니다. 이러한 환경은 모두 광범위한 커뮤니티 지원을 제공하며 수많은 기성품 외부 센서, 모터, 서보 및 기타 상상할 수있는 모든 것에 연결할 수 있습니다. Limor "Ladyada"Fried가 설립 한 전자 학습 학습 저장소 인 Adafruit는 자체 경량 깃털 개발 보드 라인과 함께 이러한 보드에 대한 모든 종류의 주변 장치를 제공합니다.

...

Microsoft .NET Framework 및 Visual Studio에 익숙한 개발자에게 가장 흥미로운 장치는 Windows 10 IoT Core 호환 환경 일 수 있습니다. 이들은 C #, Visual Basic, Python 및 Node.js / JavaScript를 포함한 다양한 언어로 작성된 UWP (Universal Windows Platform) 앱을 지원하는 x86 및 ARM 기반 장치입니다. Windows 10 IoT 코어는 Raspberry Pi, Arrow DragonBoard 410C, Intel Joule 및 Compute Stick 및 MinnowBoard를 포함한 장치를 지원합니다. Askey TurboMate E1 웨어러블과 같은 흥미로운 제품 플랫폼도 있습니다.

마이크로 컨트롤러 애플리케이션의 특정 예

자동화 된 커피 메이커의 마이크로 컨트롤러 보드 이미지입니다. 이것은 중국에서 제조 된 자동 커피 메이커의 표준 구성 요소 인 것으로 보입니다. 제조업체의 웹 사이트는 PCB에 인쇄되어 있습니다.

이미지는 두 가지보기로 구성됩니다. 왼쪽의 그림은 마이크로 컨트롤러 및 지원 회로가 포함 된 보드의 뒷면입니다. 오른쪽의보기는 LCD 화면과 현재 시간을 설정하고 시작 시간 프로그래밍과 같은 작업을 수행하는 데 사용되는 버튼 세트가있는 보드의 전면입니다.

오른쪽의보기는 커피 메이커 앞의 개구부에 맞는 캐리어에 맞습니다. 하단 PCB의 스위치는 로커 암 스위치로 작동됩니다. 특별한 목적으로 보이는 LCD는 현재 시간과 상태를 표시하고 커피 메이커의 설정을 변경할 때 사용자 인터페이스를 표시하는 데 사용됩니다. 빨간색 LED는 커피 메이커가 실제로 커피를 만드는시기를 표시하고 조명을 다시 꺼서 완료했을 때 표시하는 데 사용됩니다.

여기에 이미지 설명을 입력하십시오

마이크로 컨트롤러는 8 비트 마이크로 컨트롤러 인 ELAN Microelectronics Corp EM78P447NAM (데이터 시트) 입니다. 기본 통계 중 일부는 작고 최소한의 장치가 무엇인지 보여 주지만 의도 된 목적에 잘 작동합니다. 의도는 소프트웨어를 개발 한 다음 제조 과정의 일부로 Write Once ROM에 다운로드하는 것입니다.

• 저전력 소비:

* Less then 2.2 mA at 5V/4MHz

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

* Typically 2 µA, during sleep mode

• 칩 ROM의 4K × 13 비트

• OTP 메모리 코드의 침입을 방지하기위한 3 개의 보호 비트

• 사용자 요구 사항을 수용 할 수있는 하나의 구성 레지스터

• 칩 레지스터 148 × 8 비트 (SRAM, 범용 레지스터)


2
나는 이것이 문제를 해결하지 못한다고 생각한다. 물론 일부 제품은 잘 포장되어 있지 않지만 SBC에도 적용됩니다.
Sean Houlihane

1
@SeanHoulihane 내가이 답변으로 시도한 것은 문제에 대한 마이크로 컨트롤러 관점을 제공하는 것입니다. 특히 마이크로 컨트롤러 레이블을 충족시키는 광범위한 장치가 있습니다. 리눅스보다 OS 환경이 더 많고 파이썬이나 C보다 프로그래밍 언어가 더 많다.
Richard Chambers

1
나에게, 당신은 단지 MCU 세계가 엉망이라고 말합니다. 내가 느끼는 것은 오해의 소지가 있습니다.
Sean Houlihane

1
@SeanHoulihane 내 게시물에서 MCU 세계가 엉망이라는 인상을 받았다는 것이 유감입니다. 또 다른 해석은 MCU 세계가 많은 훌륭한 대안과 기회 중 하나이지만 독자는 자신의 편견과 편견을 어떤 이야기 에든 가져옵니다.
Richard Chambers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.