:::: MENU ::::
Posts tagged with: Arduino

파이썬을 사용한 실시간 데이터 그래프

아두이노에도 데이터를 실시간으로 plot하는 기능이 있지만, 오토스케일링 기능 때문에 가끔 불편할 때도 있다. Python Playground 책의 저자의 블로그를 보니 실시간으로 시리얼 데이터를 받아서 mathplot을 사용해서 그래프를 출력하는 프로그램이 있어서 사용해 봤다.

사용법: python ldr.py –port [port]

VS Code에서 파이썬 코드를 디버깅할 때 인자를 입력 빋아서 디버깅하는 방법이 있는 것 같아서 구글링을 해보고 tasks.json파일을 수정해서 해봤는데, 잘 안되어서 코드를 수정해서 테스트를 했다. 원래 사용법은  위 사용법처럼 포트명을 입력을 해야 함.


PlatformIO, Arduino에서의 핀매핑 정보

펌웨어 개발을 할때 MCU의 I/O핀을 맵핑해서 사용을 하게 된다. 아두이노의 경우에는 실제 HW 핀 매핑을 MCU 벤더에서 제공하는 것 처럼 low level로 access하지 않고, 보드의 실크에 적혀있는 핀 번호로 access할 수 있도록 추상화를 해 놓았다. 실제로 핀 매핑이 어떻게 되는지 보려면 맥의 경우 $HOME/라이브러리/Arduino15/packages 아래에 각 플랫폼 별로 되어 있는 폴더를 확인해 봐야 한다. 예를 들면 adafruit의 경우 /packages/adafruit/hardware/nrf52/0.21.0/variants/feather_nrf52840_express/variant.h파일과 variant.cpp 파일을 확인해 보면 된다.

PlatformIO도 아두이노와 마찬가지로 VSCode에 설치를 하면 맥에서는 $HOME/.platformio/packages 폴더 아래에 각각의 프레임워크에서 사용하는 bootloader, library들이 설치가 되어 있다.


ATTiny85 아두이노

ATTiny85는 8핀짜리 칩이나 아두이노 환경에서 개발가능하다.

  • Digispark-Compatible ATtiny85 USB 같이 부트로더가 있는 보드를 사용하거나
  • ATMEL ICE 같은 장비를 사용하고 아두이노 IDE에서 다운로드가 가능하다.

Digispark-Compatible ATtiny85 USB

주의할 점

Fuse 비트를 수정하면 Reset 핀도 사용이 가능하지만 일반적으로 안쓰는 것이 좋다. 나머지 사용이 가능한 핀은 다음과 같고, 시리얼 출력은 Software Serial이 사용이 가능하다. 단 프로그래밍을 할때 8Mhz로 해야 한다. Tools –> Board –> ATtiny85 (internal 8 MHz clock)

ATmega85 Pin Reference

사용이 가능한 함수들:

Getting Extra Pins on ATtiny

핀수가 적어서 이를 유용하게 사용하기 위한 팁 – http://www.technoblogy.com/show?LSE

참고


아두이노에서 WebUSB 사용하기

구글 크롬 65버전 이상일 경우 WebUSB를 지원한다.

Micro:Bit

Micro:bit의 경우 웹에서 MakeCode같은 프로그램으로 코딩을 하고 hex 파일을 다운로드 후 외장 디스크로 연결된 디바이스에 drag & drop를 해서 프로그래밍을 했는데, 이제는 웹브라우저에서 바로 USB를 통해 프로그래밍이 가능하다.

Arduino

아두이노의 경우 다음과 같이 작업을 한다.

  • 아두이노는 1.6.11 이상 버전 사용
  • Contents/Java/hardware/arduino/avr/cores/arduino/USBCore.h 파일의 #define USB_VERSION 0x200를 0x210 로 수정
  • https://github.com/webusb/arduino 이 repo의 WebUSB폴더를 아두이노 라이브러리에 copy
  • 예제 프로그램으로 동작 확인
  • 현재 지원되는 보드
    • Arduino Leonardo
    • Arduino/Genuino Micro
    • Arduino/Genuino Zero
    • Arduino MKR1000
    • Arduino MKRZero
    • Arduino MKRFox1200
    • Adafruit Feather 32u4

참고

https://www.hackster.io/FreeGroup/arduino-webusb-circuit-simulator-fun-9c841a

 


벽돌된 Arduino Pro Micro 살리기

Sparkfun사의 Arduino Pro Micro는 ATmega32U4를 사용하고 USB CDC기능이 있다. 문제는 이 보드를 잘못 프로그래밍하면, 즉 아두이노에서 디바이스 선택을 잘못하거나, 5V 디바이스(16Mhz)인데 3.3V 디바이스(8Mhz)로 선택을 해서 프로그래밍을 하면 USB CDC포트가 사라져서 더 이상 프로그래밍을 할 수 없다.

해결 방법

Serial 포트를 연결해서 전원을 공급하고 보드의 RST와 GND를 연결했다 떼면, PC에서 시리얼 포트가 잡힌다. 이때 아두이노에서 제대로 된 세팅으로 다시 프로그래밍을 하면 된다.


Blynk 사용법

Blynk는 IoT응용을 쉽게만들어 주는 앱이다.  동작 방식은 아래 그림과 같이 앱이 서버를 거쳐서 디바이스에 접근을 하고, 디바이스역시 서버를 거쳐서 앱과 통신을 한다. 단 디바이스에는 Blynk에서 제공하는 라이브러리를 설치를 해야한다.

디바이스

현재 지원하는 디바이스는 아두이노, ESP8266, 라즈베리파이… 등 다양하며(지원하는 하드웨어), Bluetooth, WiFi등의 connectivity가 없는 경우에도 PC를 통해서 동작이 가능하다. 아두이노에서는 스케치 > 라이브러리 포함하기 > 라이브러리 관리…를 선택해서 Blynk로 검색을 하면 라이브러리 및 예제의 설치가 가능하다. 그리고 펌웨어에서는 앱을 통해 받은 토큰을 코드에 넣어서 서버와 통신을 한다.

다운로드 받은 앱에서는 사용자 등록을 하고 디바이스와 연결될 위젯을 선택하고 이 위젯에 연결할 물리적 핀을 할당한다. 즉 버튼을 추가하고, 이 버튼을 PIN13에 연결을 하면 앱에서 버튼을 누를때 마다 보드의 PIN13이 On/Off된다. 재미있는 것은 물리적인 핀뿐 아니라 Vitrual Pin을 지정해서 아무런 값이나 파라미터로 전달이 가능하다는 것.  BLYNK_WRITE 함수는 서버에서 virtual pin값을 쓰면 실행되는 함수, BLYNK_READ 함수는 디바이스에서  virtual pin에 값을 쓰면 서버에 반영이 되는 함수이다. 즉 read / write는 서버의 관점.

BLYNK_WRITE(vPIN)

BLYNK_WRITE defines a function that is called when device receives an update of Virtual Pin value from the server:

BLYNK_WRITE(V0)
{   
  int value = param.asInt(); // Get value as integer

  // The param can contain multiple values, in such case:
  int x = param[0].asInt();
  int y = param[1].asInt();
}

BLYNK_READ(vPIN)

BLYNK_READ defines a function that is called when device is requested to send it’s current value of Virtual Pin to the server. Normally, this function should contain some Blynk.virtualWrite calls.

BLYNK_READ(V0)
{
  Blynk.virtualWrite(V0, newValue);
}

예제

구체적인 것은 이 문서의 설명과 예제를 따라가면 쉽게 이해가 간다.

기타

Blynk Doc 참고


Mac OS에서 ESP8266 개발 환경

아두이노

1. Arduino > Preferences… 의 메뉴에서 추가적인 보드매니저 URLs에 다음의 링크를 입력한다.

http://arduino.esp8266.com/stable/package_esp8266com_index.json

2. 툴 > 보드 > 보드 매니저… 의 메뉴의 필터에 ESP를 입력 후 esp8266을 선택후 설치한다.

Sming

맥에서는 https://github.com/SmingHub/Sming/wiki/MacOS-Quickstart 이 링크의 내용대로 따라하면 별 무리가 없다. 즉 이클립스, 툴체인, ESP SDK를 설치하고 Sming core를 빌드한다.

이클립스의 환경설정에서 SMING_HOME, ESP_HOME 설정을 한다.

 

SmingFramework의 Makefile-project.mk파일에서 ESPTOOL2의 경로를 다음과 같이 수정한다.

ESPTOOL2 ?= /opt/esp-open-sdk/utils/esptool2

Makefile-macos.mk파일에서 ESPTOOL의 경로를 다음과 같이 수정하고, COM_PORT항목도 환경에 맞게 수정한다.

ESPTOOL ?= $(ESP_HOME)/utils/esptool.py

Basic_Blink 프로젝트의 Makefile-user.mk파일도 다음과 같이 수정한다.

# Local build configuration

## Parameters configured here will override default and ENV values.

## Uncomment and change examples:

## Add your source directories here separated by space

MODULES = app

EXTRA_INCDIR = include

## ESP_HOME sets the path where ESP tools and SDK are located.

## Windows:

# ESP_HOME = c:/Espressif

## MacOS / Linux:

ESP_HOME = /opt/esp-open-sdk

## SMING_HOME sets the path where Sming framework is located.

## Windows:

# SMING_HOME = c:/tools/sming/Sming

## MacOS / Linux

SMING_HOME = /opt/sming/Sming

## COM port parameter is reqruied to flash firmware correctly.

## Windows:

# COM_PORT = COM3

## MacOS / Linux:

COM_PORT = /dev/tty.usbserial-A50285BI

## Com port speed

COM_SPEED= 115200

## Configure flash parameters (for ESP12-E and other new boards):

SPI_MODE = dio

## SPIFFS options

#DISABLE_SPIFFS = 1

SPIFF_FILES = files

Sming 프레임워크 소스코드를 불러와서 라이브러리를 빌드

  • Eclipse 실행
  • [File -> Import -> General -> Existing Project into Workspace] 선택
  • [Select root directory] 에서 SmingFramework 프로젝트 폴더를 선택
  • 프로젝트에서 Build

Blink 예제 빌드 확인

  • [File -> Import -> General -> Existing Project into Workspace] 선택
  • [Select root directory] Basic_Blink 프로젝트 폴더선택
  • 프로젝트에서 Build

프로젝트 빌드가 성공하면 [프로젝트 폴더\out\firmware] 폴더안에 *.bin 파일들이 생긴다.

참고


아두이노 적외선 통신

IR (Infrared) 통신

적외선을 이용한 통신인데, 적외선은 빛에 포함되어 있다. 따라서 이것을 통신에 이용하기위해 38Khz modulation을 한다. IR 수신할때 문제는 리모콘에만 반응하지 않고, 형광등이나 빛에 오동작 할 수 도 있다는 것.

Modulation

Demodulation

IR Receiver Pinout

TSOP382 datasheet

IR Protocol

(IR) ProtocolAn algorithm for turning a number of parameters into an IR signal. It defines the necessary parameters and their allowed values. In almost all protocols, the most frequently changing parameter is called “F” (function number). Almost all protocols have a “device number” called “D”. Many protocols have a “sub-device” number, called “S”. A few protocols have a toggle parameter, in general called “T”, and being persistent. A protocol may also have other parameters, with “arbitrary” names.

참고


CREATOR Pro 보드 사용 및 분석

Rak Wireless사의 CREATOR Pro 보드는 Arduino Uno의 폼펙터를 가지며, RAK473 WiFi 모듈을 사용하고 NXP사의 LPC11U35를 사용해서 mbed에서도 프로그래밍이 가능하고, Arduino에서도 프로그래밍이 가능하다. WiKi에 나온 이 제품의 정보는 다음과 같은데, Realtek사의 Ameba RTL8710보드와 거의 동일하다.

CREATOR is a programmable platform for developing all kind of IoT applications. CREATOR is equiped with various peripheral interfaces, including Wifi, GPIO, I2C, UART, PWM, ADC. Through these interfaces, CREATOR can connect with electronic components such as LED, switches, manometer, hygrometer, PM2.5 dust sensors etc.
The collected data can be uploaded via WiFi, and be utilized by applications on smart devices to realize IoT implementation.
CREATOR and Arduino Uno have similar size, and the pins on CREATOR are compatible with Arduino Uno. CREATOR uses Micro USB to supply power, which is common in many smart devices.
Currently, CREATOR currently supports Windows XP/7/8 32 and 64 bits and MAC OS operating systems. In this example, please use Arduino IDE with version 1.6.7 or later.

LPC11U35의 역할

  • CMSYS-DAP가 내장
  • RAK473를 프로그래밍 및 디버깅이 가능하게 함
  • CMSYS-DAP 펌웨어는 JTAG을 통해서 업로드하고, 이후에는 CRP-DISABLED에 파일을 Copy하면 된다. 문제는 Mac에서 파일을 카피하면 안되고 윈도우즈에서만 된다. 관련자료
  • Tindie에서 $15에 판매하는 같은 기능을 갖는 외장형 보드

RAK473

Rak 홈페이지의 자료 및 Github의 자료

아두이노 개발 환경에서 사용법

추가적으로 함께 보면 좋은 자료


아두이노의 숨겨진 히스토리

이제껏 몰랐던 아두이노의 숨겨진 이야기 http://arduinohistory.github.io/

이 글의 저자는 Hernando Barragán로 아두이노가 차용한 Wiring을 개발한 사람이다. 이 이야기의 핵심은 자신이 학생으로 있을 때 개발한 wiring을 당시 교수로 있었던 Massimo Banzi가 fork해서 아두이노를 만들었다는 것. 잘못된 정보는 무책임한 미디어에 의해 더 확산이 되고… 암튼 당사자가 주장하는 얘기의 핵심은

It is unethical and a bad example for academics to do something like this with the work of a student. Educators, more than anybody else, should avoid taking advantage of their student’s work.


Pages:12345