GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
Arduinoライクなスケッチができるように、ライブラリを作ってます。API仕様は製品版ではスケッチリファレンスとしてまとめてますが、プロデューサミーティング中は変更要素も多いので、サンプルと共に要点を書いていきたいと思います。
●RS-485
RS-485は差動信号D+, D-で半二重通信します。送信と受信の切り替えを行うためSerialクラスにdirection(mode)のメソッドを用意しました。modeにINPUTかOUTPUTを指定することで送信(OUTPUT)、受信(INPUT)を行います。以下、Serial3が送信、Serial4が受信するサンプルです。
#include <Arduino.h>// Hardware: connect D+ to D+ and D- to D-.void setup(){ Serial.begin(9600); Serial3.begin(9600); Serial4.begin(9600); Serial3.direction(OUTPUT); Serial4.direction(INPUT);}void loop(){ if(Serial.available()){ Serial3.write(Serial.read()); } if(Serial4.available()){ Serial.write(Serial4.read()); }}
●シリアルサーボの半二重
Serial1、Serial2は近藤科学のサーボなどをつなげられるように、1線シリアル(半二重)をサポートしてます。RS-485同様にSerial.direction(mode)で、modeにHALFDUPLEXを指定すると、半二重通信になります。このとき、Serial.writeやSerial.printなどで送信したとき、その送信データが受信されるため、ダミーリードする必要があります。以下、Serial1でのサンプルです。送信データは受信データに返るため、それを読んでいるだけです。
#include <Arduino.h>void setup(){ Serial.begin(9600); Serial1.begin(9600); Serial1.direction(HALFDUPLEX);}void loop(){ if(Serial.available()){ Serial1.write(Serial.read()); } if(Serial1.available()){ Serial.write(Serial1.read()); }}
●analogWrite
analogWriteでピン1,3,9,20を指定した場合、ハードウェアによるPWM波形が出力されます。それ以外はSoftwarePWMによるPWM波形が出力されます。SoftwarePWMはそれなりに割り込みの負荷がかかるため、基本的には1,3,9,20を使うのがよいです。なお、デフォルト周波数は490Hzですが、analogWriteFrequency(freq)で周波数を変更できます。
ピン19を指定した場合は、D/A出力になりますので、PWMではなく純粋なアナログの電圧がかかります。指定範囲は12bit 0x0~0xFFFです。
以下、ハードウェアPWMの出力と、ピン19のD/Aでのこぎり波形を出力するサンプルです。
#include <Arduino.h>void setup(){ analogWrite(1, 100); analogWrite(3, 100); analogWrite(9, 100); analogWrite(20, 200);}void loop(){ for(int i = 0; i < 0xfff; i++){ analogWrite(19, i); // DAC } for(int i = 0; i < 0xfff; i++){ analogWrite(19, 0xfff - i); }}
●ESP8266(WiFi)の通信について
ESP8266は、Serial6につなげてATコマンドで制御します。Serial6.begin(baud)が呼ばれたとき、IO15、IO0、ENを適当に制御してATコマンドの受信ができるようにしてます。SDKにはNishimuraさんがメンテしてくださった「WeeESP8266_GR」を含めてます。既存サンプルにArduino.hをインクルードし、begin(Serial6)を指定すれば動作します。
I2CのOLED(例えばこれ)を制御するサンプル(ライブラリ)はありますでしょうか?
ESP8266で取得したIPアドレスを表示させたいのですが。
Adafruit_SSD1306とAdafruit-GFX-Libraryから必要なファイルをもってきて少し修正するだけで動きました。
ありがとうございました。