Renesas Rulz - Japan
Renesas Rulz - Japan
  • User
    Join or sign in
  • Site
  • Search Japan.RenesasRulz.com
  • User
  • Renesas Rulz
  • FAQ
  • パートナー
  • 半導体セミナ
  • eラーニング
  • ヘルプ
  • More
  • Cancel
  • かふぇルネ
  • がじぇるね
  • English Community
  • More
  • Cancel
がじぇっとるねさすコミュニティ
がじぇっとるねさすコミュニティ
GR-ROSE スケッチサンプル(RS-485や、半二重、その他)
  • Forums
  • Blog
  • Files
  • がじぇっとるねさす ゆーざー会 - Wiki
  • Tags
  • More
  • Cancel
  • New

 

 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関連

 女子美コラボ

 その他

 ※プロデューサミーティング中

 作り方使い方資料

 イベント関連

 作品記事

 体験記事

 その他

 

 ライブラリ

 ツール

 その他・過去ファイル

  • State Not Answered
  • +1 person also asked this people also asked this
  • Replies 15 replies
  • Subscribers 446 subscribers
  • Views 13504 views
  • Users 0 members are here
Options
  • Share
  • More
  • Cancel
Related Tags
  • B3M
  • DDS-XRCE
  • Dynamixel
  • esp8266
  • FIT
  • GR-ROSE
  • HYGRO
  • ICS
  • include
  • JSTK2
  • KYPD
  • MG996R
  • MIC3
  • NAV
  • OLED
  • pin
  • PMOD
  • ROS
  • ROS2
  • rosserial
  • RS-485
  • RX65N
  • Serial2
  • spi
  • Wire
Related

スケッチサンプル(RS-485や、半二重、その他)

Okamiya Yuuki
Okamiya Yuuki over 2 years ago

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)を指定すれば動作します。

  • Reply
  • Cancel
  • Cancel
  • 西村備山
    0 西村備山 over 2 years ago
    ESP8266に関して、言い忘れてました。

    SDKに私がフォークしたWeeESP8266が入れられてますが、あれは、旧来のものがうまく動かなかったので個人的に修正したもので、詳しく検証したわけでも全ての機能を動作確認したわけではありません。中途半端なものを公開してすみません。

    おそらくESP8266のファームのバージョンによって、ATコマンドに対する応答(とくに改行コード)が異なるので、手持ちのWA-MIKANに載っているESP8266に合わせて修正したのです。UDPしか動かしてないので、修正漏れもあると思いますし、GR-ROSEに載っているESP8266のファームに合うかも未検証です。すみません。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 2 years ago in reply to 西村備山
    いえ、余計なご心配をおかけしてすみません。了解です。ESP8266による無線はFreeRTOSベースのAPIをデフォルトにするかもしれません。
    Adafruitベースのライブラリを使いたい人が、そのライブラリをインポートして使えればよいかなと思っています。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • hero
    0 hero over 2 years ago in reply to Okamiya Yuuki
    RRS485について質問です
    双方向通信にしたい場合
    Serial3.direction(OUTPUT);
    Serial4.direction(INPUT);
    をloopの中に書いたらいいのでしょうか?
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 2 years ago in reply to hero
    ?ちょっと双方向の意味が分かってません。
    RS-485は半二重で、例えばROSEがマスターでSerial3を使用する場合、マスター送信はSerial3.direction(OUTPUT)、マスター受信はSerial3.direction(INPUT)を使って方向を切り替えます。
    heroさんの双方向とは、送信も受信も同時に行えるように、Serialを2チャネル使うということですかね?やったことがないので分からないです。
    ただ、同じバス上にSerial3もSerial4もつなげた場合、マスター送信したものが受信されるため、ダミーリードとかは必要でしょうね。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • hero
    0 hero over 2 years ago in reply to Okamiya Yuuki

    せっかくのRS485一つのSerialで送受信できる方がメリット出てくるかなと
    思ってます。
    尚、RS485モジュール300円ほどで入手できるのでそれを購入して試そうとしてます。

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • hero
    0 hero over 2 years ago in reply to hero
    ●RS-485のサンプルの確認方法について質問です
    WEBコンパイラーでビルドして
    IDE for GRのシリアルモニターで見てます

    送信ボックスに値を入れて送信ボタンを押すと
    値が返ってくるという認識でいいでしょうか?

    現在何も返ってきません
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • hero
    +1 hero over 2 years ago in reply to hero

    ●RS-485のサンプルの確認方法について質問です
    WEBコンパイラーでビルドして
    IDE for GRのシリアルモニターで見てます

    送信ボックスに値を入れて送信ボタンを押すと
    値が返ってくるという認識でいいでしょうか?

    現在何も返ってきません

    お忙しいところ恐縮ですが
    よろしくお願いいたします。

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • るぅて
    0 るぅて over 2 years ago

    I2CのOLED(例えばこれ)を制御するサンプル(ライブラリ)はありますでしょうか?

    ESP8266で取得したIPアドレスを表示させたいのですが。

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • h7ga40
    0 h7ga40 over 2 years ago in reply to るぅて
    制御チップが同じ、これを元にして使ってます。
    github.com/.../Adafruit_SSD1306
    I2Cの使用例も入ってます。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • るぅて
    0 るぅて over 2 years ago in reply to h7ga40
    情報ありがとうございます。

    試してみます。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • るぅて
    0 るぅて over 2 years ago in reply to るぅて

    Adafruit_SSD1306とAdafruit-GFX-Libraryから必要なファイルをもってきて少し修正するだけで動きました。

    ありがとうございました。

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • るぅて
    0 るぅて over 2 years ago in reply to るぅて
    OLED単体だけでは動いたのですが、今日ESP8266と合わせて試すとOLEDのdisplay()呼び出しで処理が止まってしまいます。

    いろいろ試していたところESP8266自体も動かなくなってしまいました。。。

    プロデューサーミーティングの直前でこれは辛い、、、
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 2 years ago in reply to るぅて
    すみません、別スレでdigipontaさんから挙がっていたSerialとWireを同時に使うとおかしくなるという話と酷似してますね。直前にビッグなバグが残っていてすみません!まだ調査中です。なかなか本格的に取り掛かれてません。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 2 years ago in reply to Okamiya Yuuki
    SerialとWireを同時に使うと正しく動作しない不具合をV0.04で修正させていただきました。今さらになってしまいすみません。
    ESP8266が動かないというのが気になりますが、お時間あればお試しください。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • るぅて
    0 るぅて over 2 years ago in reply to Okamiya Yuuki
    対応ありがとうございます。さっそく試してみました。
    結果、無事ESP8266とOLEDが動作いたしました。

    ESP8266が動かなかったのは、私がOLEDの処理を取り除き切れてなかったためでした。すいません。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
サイト使用条件
プライバシーポリシー
お問い合わせ
© 2010-2020 Renesas Electronics Corporation. All rights reserved.