
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