Serial communication channel: babbler_serial
Command module (command registration and execution API): babbler_h
Simple command line module (input format): babbler_simple
JSON module (input and response format): babbler_json
git clone https://github.com/1i7/babbler_h.git
$HOME/Arduino/libraries/babbler_h $HOME/Arduino/libraries/babbler_serial $HOME/Arduino/libraries_babbler_json
#include "babbler_serial.h"
// #define SERIAL_READ_BUFFER_SIZE 128 #define SERIAL_WRITE_BUFFER_SIZE 512 // . // +1 char serial_read_buffer[SERIAL_READ_BUFFER_SIZE+1]; char serial_write_buffer[SERIAL_WRITE_BUFFER_SIZE];
int handle_input(char* input_buffer, int input_len, char* reply_buffer, int reply_buf_size) { // , // input_buffer[input_len] = 0; // - - if(reply_buf_size > input_len + 10) sprintf(reply_buffer, "you say: %s\n", input_buffer); else sprintf(reply_buffer, "you are too verbose, dear\n"); return strlen(reply_buffer); }
void setup() { Serial.begin(9600); Serial.println("Starting babbler-powered device, type something to have a talk"); babbler_serial_set_packet_filter(packet_filter_newline); babbler_serial_set_input_handler(handle_input); //babbler_serial_setup( // serial_read_buffer, SERIAL_READ_BUFFER_SIZE, // serial_write_buffer, SERIAL_WRITE_BUFFER_SIZE, // 9600); babbler_serial_setup( serial_read_buffer, SERIAL_READ_BUFFER_SIZE, serial_write_buffer, SERIAL_WRITE_BUFFER_SIZE, BABBLER_SERIAL_SKIP_PORT_INIT); }
void loop() { // , babbler_serial_tasks(); }
ping
help
help --list
help _
#include "babbler.h"
#include "babbler_simple.h"
#include "babbler_cmd_core.h"
#include "babbler_serial.h"
// #define SERIAL_READ_BUFFER_SIZE 128 #define SERIAL_WRITE_BUFFER_SIZE 512 // . // +1 char serial_read_buffer[SERIAL_READ_BUFFER_SIZE+1]; char serial_write_buffer[SERIAL_WRITE_BUFFER_SIZE];
/** */ extern const babbler_cmd_t BABBLER_COMMANDS[] = { // babbler_cmd_core.h CMD_HELP, CMD_PING }; /** */ extern const int BABBLER_COMMANDS_COUNT = sizeof(BABBLER_COMMANDS)/sizeof(babbler_cmd_t);
/** */ extern const babbler_man_t BABBLER_MANUALS[] = { // babbler_cmd_core.h MAN_HELP, MAN_PING }; /** */ extern const int BABBLER_MANUALS_COUNT = sizeof(BABBLER_MANUALS)/sizeof(babbler_man_t);
void setup() { Serial.begin(9600); Serial.println("Starting babbler-powered device, type help for list of commands"); babbler_serial_set_packet_filter(packet_filter_newline); babbler_serial_set_input_handler(handle_input_simple); //babbler_serial_setup( // serial_read_buffer, SERIAL_READ_BUFFER_SIZE, // serial_write_buffer, SERIAL_WRITE_BUFFER_SIZE, // 9600); babbler_serial_setup( serial_read_buffer, SERIAL_READ_BUFFER_SIZE, serial_write_buffer, SERIAL_WRITE_BUFFER_SIZE, BABBLER_SERIAL_SKIP_PORT_INIT); }
void loop() { // , babbler_serial_tasks(); }
]help --list
help ping
]ping
ok
]help
Commands: help list available commands or show detailed help on selected command ping check if device is available
]help ping
ping - manual NAME ping - check if device is available SYNOPSIS ping DESCRIPTION Check if device is available, returns "ok" if device is ok
]help help
help - manual NAME help - list available commands or show detailed help on selected command SYNOPSIS help help [cmd_name] help --list DESCRIPTION List available commands or show detailed help on selected command. Running help with no options would list commands with short description. OPTIONS cmd_name - command name to show detailed help for --list - list all available commands separated by space
#include "babbler.h" #include "babbler_simple.h" #include "babbler_cmd_core.h" #include "babbler_serial.h" // #define SERIAL_READ_BUFFER_SIZE 128 #define SERIAL_WRITE_BUFFER_SIZE 512 // . // +1 char serial_read_buffer[SERIAL_READ_BUFFER_SIZE+1]; char serial_write_buffer[SERIAL_WRITE_BUFFER_SIZE];
#define LED_PIN 13
/** ledon ( ) */ int cmd_ledon(char* reply_buffer, int reply_buf_size, int argc=0, char *argv[]=NULL) { digitalWrite(LED_PIN, HIGH); // strcpy(reply_buffer, REPLY_OK); return strlen(reply_buffer); }
babbler_cmd_t CMD_LEDON = { /* */ "ledon", /* */ &cmd_ledon };
babbler_man_t MAN_LEDON = { /* */ "ledon", /* */ "turn led ON", /* */ "SYNOPSIS\n" " ledon\n" "DESCRIPTION\n" "Turn led ON." };
/** ledoff ( ) */ int cmd_ledoff(char* reply_buffer, int reply_buf_size, int argc=0, char *argv[]=NULL) { digitalWrite(LED_PIN, LOW); // strcpy(reply_buffer, REPLY_OK); return strlen(reply_buffer); } babbler_cmd_t CMD_LEDOFF = { /* */ "ledoff", /* */ &cmd_ledoff }; babbler_man_t MAN_LEDOFF = { /* */ "ledoff", /* */ "turn led OFF", /* */ "SYNOPSIS\n" " ledoff\n" "DESCRIPTION\n" "Turn led OFF." };
/** */ extern const babbler_cmd_t BABBLER_COMMANDS[] = { // babbler_cmd_core.h CMD_HELP, CMD_PING, // CMD_LEDON, CMD_LEDOFF }; /** */ extern const int BABBLER_COMMANDS_COUNT = sizeof(BABBLER_COMMANDS)/sizeof(babbler_cmd_t); /** */ extern const babbler_man_t BABBLER_MANUALS[] = { // babbler_cmd_core.h MAN_HELP, MAN_PING, // MAN_LEDON, MAN_LEDOFF }; /** */ extern const int BABBLER_MANUALS_COUNT = sizeof(BABBLER_MANUALS)/sizeof(babbler_man_t);
void setup() { Serial.begin(9600); Serial.println("Starting babbler-powered device, type help for list of commands"); babbler_serial_set_packet_filter(packet_filter_newline); babbler_serial_set_input_handler(handle_input_simple); //babbler_serial_setup( // serial_read_buffer, SERIAL_READ_BUFFER_SIZE, // serial_write_buffer, SERIAL_WRITE_BUFFER_SIZE, // 9600); babbler_serial_setup( serial_read_buffer, SERIAL_READ_BUFFER_SIZE, serial_write_buffer, SERIAL_WRITE_BUFFER_SIZE, BABBLER_SERIAL_SKIP_PORT_INIT); pinMode(LED_PIN, OUTPUT); } void loop() { // , babbler_serial_tasks(); }
Source: https://habr.com/ru/post/315084/
All Articles