記事一覧

rosserial で M5Atom Lite WiFi経由で Lチカ 備忘録

osserial で M5Atom Lite WiFi経由で Lチカ 備忘録



こんにちはRoboTakaoです。
前回、ようやくrosserial+M5AtomでUSB経由でLチカしましたが
今回はWiFi経由でLチカします。


rosserial17.jpeg


私の環境の場合、MacBookProでParallels Desktopを使っているため
WiFiの設定を少しします


環境
MacBookPro 2019 Castalina
Parallels Desktop 16
ubuntu 18.04.3
ROS Melodic
M5Atom Lite


Parallels Desktopの設定
デバイスの構成からネットワークの設定をします
ソースをWiFiとしてホストのMACアドレスを使用する、にします。


rosserial15.png

ubuntuでIPアドレスを確認

rosserial14.png

これをros coreのアドレスとします

ターミナルで

$ roscore
$ rosrun rosserial_python serial_node.py tcp

ここでM5Atomに電源を接続して起動

接続されたら、別のターミナルで下記

rostopic pub toggle_led std_msgs/Empty --once

これでUSB接続同様にLチカできました

rosserial16.png

rosserial16.jpeg

rosserial17.jpeg

スケッチ


/*
* rosserial Subscriber Example
* Blinks an LED on callback
*/
#include "M5Atom.h"
#include <ros.h>
#include <std_msgs/Empty.h>
#include <WiFi.h>
const char* ssid = "XXXXXXXXXXX"; //自分のSSID
const char* password = "XXXXXXXXXXXX"; //自分のパスワード

WiFiClient client;
IPAddress server(192, 168, 10, 7); //ROS core IP adress

class WiFiHardware {
public:
WiFiHardware() {};
void init() {
client.connect(server, 11411);
}
int read() {
return client.read();
}
void write(uint8_t* data, int length) {
for (int i = 0; i < length; i++)
client.write(data[i]);
}
unsigned long time() {
return millis(); // easy; did this one for you
}
};

ros::NodeHandle_ nh;

void messageCb( const std_msgs::Empty& toggle_msg){
M5.dis.drawpix(0, 0x00ff00); //red
delay(1000);
M5.dis.drawpix(0, 0x0000ff); //blue
}

ros::Subscriber sub("toggle_led", &messageCb );

void setupWiFi() {
WiFi.begin(ssid, password);
Serial.print("\nConnecting to "); Serial.println(ssid);
uint8_t i = 0;
while (WiFi.status() != WL_CONNECTED && i++ < 20) delay(500);
if (i == 21) {
Serial.print("Could not connect to"); Serial.println(ssid);
while (1) delay(500);
}
Serial.print("Ready! Use ");
Serial.print(WiFi.localIP());
Serial.println(" to access client");
}

void setup()
{
Serial.begin(115200);
// void M5Atom::begin(bool SerialEnable , bool I2CEnable , bool DisplayEnable )
M5.begin(true, false, true);
setupWiFi();
M5.dis.drawpix(0, 0x000000); //black
M5.dis.drawpix(0, 0x0000ff); //blue
nh.initNode();
nh.subscribe(sub);
}

void loop()
{
nh.spinOnce();
delay(1);
}







スポンサードリンク

コメント

コメントの投稿

非公開コメント

プロフィール

RoboTakao

Author:RoboTakao
みなさんご訪問ありがとうございます。ロボット作りたいけどお小遣いそんなにないし、簡単でローコストでロボットを作るための私のプロジェクトを紹介します。

ウェブサイトもありますのでそちらもよろしくお願いします。
http://robotakao.jp/

スポンサーリンク