Introduction: Robot Cat
This instructables show somethings about building a robot cat.
Supplies
M5Stack PSRAM Camera Module: https://m5stack.com/products/esp-32-camera-psram
Adafruit 16-Channel 12-bit PWM/Servo Driver: https://www.adafruit.com/product/815
13 of EMAX ES08MA II Servo: https://emaxmodel.com/es08ma-ii.html
8.4 v Lipo: https://www.aliexpress.com/wholesale?SearchText=8...
8.4 v Lipo Charger: https://www.aliexpress.com/wholesale?SearchText=8....
DC regulator for System: https://www.aliexpress.com/item/4000016331112.html
DC regulator for Servo: https://www.aliexpress.com/item/32912982626.html
Grove to 4 pin Female Jumper Conversion Cable: https://www.seeedstudio.com/Grove-4-pin-Female-Jum...
Step 1: Why Build My Own Robot Cat?
I am playing with the well known Strandbeest many years ago and really love the artificial life. And then I tried Trotbot, but sorry about not yet built Wadevag suggested Strider :P
Two years ago, I start saw many robot cats and dogs projects on the web. They works, walk well and can do some pose. The only shortcoming is it does not look like a cat or dog.
So I try to build my own robot cat. The main target are look like a cat, act like a cat.
Ref.:
https://en.wikipedia.org/wiki/Theo_Jansen#The_str...
https://www.instructables.com/id/Design-Robot-Legs...
Step 2: Bionics
In order to build a robot look like a cat, we need first study the cat skeleton.
Cat is a digitigrade, that means they stands or walks on its digits, or toes. So cat have noticeable 3 joints for the back legs while human(Plantigrade) only have 2 joints. For the cat front legs, the metacarpals is relatively too short. So it is noticeable 2 joints for the front legs. So the robot cat have 2 joints on the front legs and 3 joints on the back legs, i.e. 10 servos. (most other robot cats and dogs only have 2 joints for the back legs)
Head and neck should have many moving parts, turning, nodding and also ears, eyes and month motions; Tail motion is actual most difficult to imitate, it actually combined by tens of joints and muscles. In first phase, I would like concentrate on the 4 legs movement first. For simplicity, I just use 2 servos for turning and nodding the head and 1 servo to make some simple tail turning. Cat tail normally point to the ground, but I found a long tail pointing up make it look vitality, so it always tail up.
Ref.:
https://en.wikipedia.org/wiki/Bionics
Step 3: 3D Printing
The robot cat 3D print prototype is already at the third iteration and may be more iteration later on.
Please download and print all the parts at thingiverse: https://www.thingiverse.com/thing:4164643
Step 4: Servo Driver Board
The first phase of robot cat reduced many moving parts, but it still requires 13 servos. In my previous experience, direct driver servos with MCU GPIO is not a good choice. The frequency signal may vary while MCU doing another job at the same time and the servo may become unstable or introduce unexpected behavior. Dedicate an individual driver board generate servo signal is much better.
PCA9685 driver board is a common solution, MCU simply use I2C interface communicate with the driver board and it can control 16 servos at the same time continuously.
Step 5: Robot Brain
Various MCU able to control a servo robot, here are some preference when I choose among them:
- built-in vision sensor for future development
- small enough to fit in the robot cat head
- wireless connective
- I2C interface to communicate with servo driver board
I have a M5Stack Camera Module in hand and it can fulfill all the above requirements.
Step 6: Measure & Adjust DC Regulators
Like most dev device, M5Stack Camera Module operate in 5 V.
Most tiny servo operate in 5-6 V and each servo normal operate can draw 200 mA and more, operate 13 servos at the same time are over 2.6 A. In order to avoid the robot brain affected by power shortage, it is better dedicate an individual DC regulator for the brain and servos.
The output voltage of both DC regulators in hand are adjustable, sticky remember adjust the output voltage to 5V and 6 V respectively before using it or the components may be burnt.
Step 7: Servo Tester
In my experience, servo is very easy to damage. It is better buy few more spares in same order. Before using it, you can use a servo tester to check it can works normal: https://www.instructables.com/id/Servo-Tester-2/
Step 8: FSBrowserPlus
ESP32 have a bundled example called FSBrowser. It is a simple web server that host the web source files copied to SPIFFS, it have a simple web editor for amend the source over WiFi and also it have a simple API to read the GPIO values.
I have enhanced this example to FSBrowserPlus:
- Added PCA9685 Servo Board API
- Added a WebSocket server
- Added Robot Cat Pose Design web page
Step 9: Program
Arduino IDE
Download and install Arduino IDE if you are not yet do it:
https://www.arduino.cc/en/main/software
ESP32 Support
Follow the Installation Instructions to add ESP32 support if you are not yet do it:
https://github.com/espressif/arduino-esp32
Arduino ESP32 filesystem uploader
Follow the installation steps to install Arduino ESP32 filesystem uploader if you are not yet do it:
https://github.com/me-no-dev/arduino-esp32fs-plugi...
FSBrowserPlus
Download FSBrowserPlus: (press "Clone or Download" -> "Download ZIP")
https://github.com/moononournation/FSBrowserPlus
ESP Async Web Server Library
Download latest ESPAsyncWebServer libraries: (press "Clone or Download" -> "Download ZIP")
https://github.com/me-no-dev/ESPAsyncWebServer.git
Import libraries in Arduino IDE. (Arduino IDE "Sketch" Menu -> "Include Library" -> "Add .ZIP Library" -> select downloaded ZIP file)
Compile & Upload
- Connect the M5Stack Camera Module with USB cable
- Open Arduino IDE
- Open FSBrowserPlus
- Edit the ssid and password to your own WiFi AP credential
- Press Arduino IDE "Upload" button
- Select "Tools" menu -> ESP32 Sketch Data Upload
Step 10: Install Power Circuit
Here are the power connect summary:
Lipo Battery plug +ve pin -> 5V DC regulator INPUT +ve pin 6V DC regulator INPUT +ve pin -ve pin -> 5V DC regulator INPUT -ve pin 6V DC regulator INPUT -ve pin PCA9685 Servo Driver Board GND pin -> 5V DC regulator OUTPUT -ve pin 6V DC regulator OUTPUT -ve pin Grove cable black pin SCL pin -> Grove cable yellow pin SDA pin -> Grove cable white pin VCC pin -> 5V DC regulator OUTPUT +ve pin Grove cable red pin V+ pin -> 6V DC regulator OUTPUT +ve pin
Use M2 screws and double adhesive tape to fix all boards under the robot cat body.
Step 11: Servo Position & Connection
The FSBrowserPlus program have a servo initial process, it will set all the servos to the middle position of the turning range. Before install the servos, it is better connect the servos to the driver board, connect the grove connector to the M5Stack Camera Module and plug in the battery to reset all the servo position to the middle.
Here are the servo connection list:
Port 0: Left Front Leg Joint 1 Port 1: Left Front Leg Joint 2 Port 2: Left Back Leg Joint 1 Port 3: Left Back Leg Joint 2 Port 4: Left Back Leg Joint 3 Port 5: Head Turn Port 6: Head Nod Port 7: Not connected Port 8: Not connected Port 9: Not connected Port 10: Tail Port 11: Right Back Leg Joint 3 Port 12: Right Back Leg Joint 2 Port 13: Right Back Leg Joint 1 Port 14: Right Front Leg Joint 2 Port 15: Right Front Leg Joint 1
Step 12: Paw Friction & Protection
3D printed paws are easy to worn out and not enough friction to the ground. Simply add some rubber band on it can fix these problems.
Step 13: Install Joint
Use a 6 mm M3 screw to connect the joint. Insert a nylon or PET ring in the middle can reduce the friction.
Step 14: Install Servo
There are few type of nylon arm included in the servo package. Insert the shortest nylon arm to the servo, except head turn require a cross arm.
- insert the servo into the joint start from the arm side
- push the other side in carefully
- plug in the battery to ensure the servo position is in the middle of the turning range
- unplug the battery
- screw up 2 screws on both side
- screw up the black screw together with the joint
Repeat Install Joint and servo steps for all 10 leg joints.
Step 15: Install Head & Tail
The head turn servo can install from the upper side or lower side depends on you would like to have a longer or shorter neck.
The head nod servo install method is the same as the leg joint.
Then you can install the M5Stack Camera Module with two 12 mm M4 screws
The tail servo must install from the lower side and then you can use a 8 mm M2 screw to fix the tail.
Step 16: Fix Battery
Fix the Battery on the Robot Cat back with some double adhesive tape.
Step 17: Tidy Up Wires
There are a hole near the head, the battery, Grove and head nod servo wires can pass though this hole to the power or servo board.
There are reserved some rooms between front legs and the servo board, all wires can tidy up to this area.
Step 18: Robot Cat Pose Design
- plug in the battery to power on the robot cat
- browse to http://fsbrowserplus.local/pose.htm
- adjust the slider for each joint
- robot cat will have real time response
- servos continuous draw the power for keeping the pose, you may press the Rest button to let the robot cat take a rest
Step 19: Gallery
Step 20: What's Next?
This project is started over 2 years, but it still at the beginning. Much more I want to do...
The first phase of hardware just start to work, it's time to work with software part:
Simply edit the HTML and Javscript:
- add a pose sequence design web page, combine a number of pose in sequence to make some motion
And more for modifying the Arduino program:
- store motion sequence data to flash
- vision sensor, add some AI factor to make environment interaction
- web remote control interface with camera image stream
Hardware part:
- reduce weight
- better weight balance design especially when only 2 legs touch the ground
- add foot touch sensor to ensure touched the ground
- add balance sensor to avoid unexpected falling (cat should have good balance)
- add microphone for listening and even response from speech recognition
- more head and tail joints for more motions
- add speaker for MEOW!
Follow my twitter for the latest news: https://twitter.com/moononournation

Second Prize in the
Robots Contest
31 Comments
1 year ago on Step 20
Incredible! Forget "Strider", stay on this path! ;)
Reply 11 months ago
I cannot forget it, Strider run so good!
https://youtu.be/O6HDDYFuFDs
Reply 11 months ago
Love it!
Reply 1 year ago
Strider still on my wish list, I will print a tiny one “once” I have time😉
1 year ago
Thanks so much for making this! I 3D printed it out today and it is a great size and seems to be strong.
Tip 1 year ago
maybe the cat could have some programming to make it move by itself.
1 year ago
Is it possible to exchange the M5Stack PSRAM Camera for an ESP32-Cam Aithinker?
I have tried it, I have changed the SDA-> 14 and SCL-> 15 pins, fixed my network and password, compiled and uploaded with arduino ide without problems.
But I can't access the web page, the serial monitor gives me this
/ *
IP Address: 192.168.1.162
E (7829) SPIFFS: mount failed, -10025
ESP Async Web Server started.
NOT_FOUND: GET http: //fsbrowserplus.local/
_HEADER [Host]: fsbrowserplus.local
_HEADER [Connection]: keep-alive
_HEADER [Cache-Control]: max-age = 0
_HEADER [Upgrade-Insecure-Requests]: 1
_HEADER [User-Agent]: Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, like Gecko) Chrome / 85.0.4183.121 Safari / 537.36 Edg / 85.0.564.68
_HEADER [Accept]: text / html, application / xhtml + xml, application / xml; q = 0.9, image / webp, image / apng, * / *; q = 0.8, application / signed-exchange; v = b3; q = 0.9
_HEADER [Accept-Encoding]: gzip, deflate
_HEADER [Accept-Language]: es, es-ES; q = 0.9, en; q = 0.8, en-GB; q = 0.7, en-US; q = 0.6
NOT_FOUND: GET http://192.168.1.162/
_HEADER [Host]: 192.168.1.162
_HEADER [Connection]: keep-alive
_HEADER [Upgrade-Insecure-Requests]: 1
_HEADER [User-Agent]: Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, like Gecko) Chrome / 85.0.4183.121 Safari / 537.36 Edg / 85.0.564.68
_HEADER [Accept]: text / html, application / xhtml + xml, application / xml; q = 0.9, image / webp, image / apng, * / *; q = 0.8, application / signed-exchange; v = b3; q = 0.9
_HEADER [Accept-Encoding]: gzip, deflate
_HEADER [Accept-Language]: es, es-ES; q = 0.9, en; q = 0.8, en-GB; q = 0.7, en-US; q = 0.6
NOT_FOUND: GET http: //fsbrowserplus.local/ov2640.htm
_HEADER [Host]: fsbrowserplus.local
_HEADER [Connection]: keep-alive
_HEADER [Upgrade-Insecure-Requests]: 1
_HEADER [User-Agent]: Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, like Gecko) Chrome / 85.0.4183.121 Safari / 537.36 Edg / 85.0.564.68
_HEADER [Accept]: text / html, application / xhtml + xml, application / xml; q = 0.9, image / webp, image / apng, * / *; q = 0.8, application / signed-exchange; v = b3; q = 0.9
_HEADER [Accept-Encoding]: gzip, deflate
_HEADER [Accept-Language]: es, es-ES; q = 0.9, en; q = 0.8, en-GB; q = 0.7, en-US; q = 0.6
[E] [camera.c: 495] i2s_run (): Timeout waiting for VSYNC
Camera capture failed
NOT_FOUND: GET http: //fsbrowserplus.local/favicon.ico
* /
and more as I try to access other options.
And another thing, would it be possible to leave the fixed IP?
Thanks in advance and sorry for the translation ... ;-)
Reply 1 year ago
Sorry for the late reply, the key error is 2nd line log:
E (7829) SPIFFS: mount failed, -10025
I have omitted the step of upload the SPIFFS data, Step 8 is updated for SPIFFS data upload.
1 year ago on Step 20
Purrrfect!
Reply 1 year ago
nice
1 year ago
Good work!
1 year ago
Nice
1 year ago on Step 17
i allways get erros:
please help!
C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o):(.literal.uartDetachRx+0x0): undefined reference to `pinMatrixInDetach'
C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o):(.literal.uartDetachTx+0x0): undefined reference to `pinMatrixOutDetach'
C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o):(.literal.uartAttachRx+0x0): undefined reference to `pinMatrixInAttach'
C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o):(.literal.uartAttachTx+0x0): undefined reference to `pinMatrixOutAttach'
C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o):(.literal.uartEnd+0x4): undefined reference to `removeApbChangeCallback'
C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o):(.literal.uartSetBaudRate+0x0): undefined reference to `getApbFrequency'
C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o):(.literal.uartBegin+0x14): undefined reference to `addApbChangeCallback'
C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o): In function `uartDetachRx':
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal-uart.c:411: undefined reference to `pinMatrixInDetach'
C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o): In function `uartDetachTx':
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal-uart.c:411: undefined reference to `pinMatrixOutDetach'
C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o): In function `uartAttachRx':
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal-uart.c:411: undefined reference to `pinMode'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal-uart.c:411: undefined reference to `pinMatrixInAttach'
C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o): In function `uartAttachTx':
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal-uart.c:411: undefined reference to `pinMode'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal-uart.c:411: undefined reference to `pinMatrixOutAttach'
C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o): In function `uartEnd':
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal-uart.c:411: undefined reference to `removeApbChangeCallback'
C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o): In function `uartSetBaudRate':
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal-uart.c:411: undefined reference to `getApbFrequency'
C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o): In function `uartBegin':
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal-uart.c:411: undefined reference to `addApbChangeCallback'
C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o): In function `uartDetectBaudrate':
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal-uart.c:555: undefined reference to `getApbFrequency'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(camera.o):(.literal.camera_fb_init+0xc): undefined reference to `pathToFileName'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(camera.o): In function `camera_fb_init':
/home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/camera.c:250: undefined reference to `pathToFileName'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(camera.o): In function `skip_frame':
/home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/camera.c:205: undefined reference to `pathToFileName'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(camera.o): In function `i2s_run':
/home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/camera.c:495: undefined reference to `pathToFileName'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(camera.o): In function `camera_probe':
/home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/camera.c:1036: undefined reference to `pathToFileName'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(camera.o):/home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/camera.c:1120: more undefined references to `pathToFileName' follow
sketch\FSBrowserPlus.ino.cpp.o:(.literal._ZL10pca9685Offv+0x4): undefined reference to `PCA9685::setChannels(unsigned char, unsigned char, unsigned short)'
sketch\FSBrowserPlus.ino.cpp.o:(.literal._ZL7setGPIOhh+0x4): undefined reference to `pinMode'
sketch\FSBrowserPlus.ino.cpp.o:(.literal._ZL7setGPIOhh+0x8): undefined reference to `digitalWrite'
sketch\FSBrowserPlus.ino.cpp.o:(.literal._ZL10setChannelht+0x4): undefined reference to `PCA9685::setChannel(unsigned char, unsigned short)'
sketch\FSBrowserPlus.ino.cpp.o:(.literal._ZL10setChannelht+0x8): undefined reference to `delay'
sketch\FSBrowserPlus.ino.cpp.o:(.literal._ZNSt17_Function_handlerIFvP22AsyncEventSourceClientEZ5setupvEUlS1_E3_E9_M_invokeERKSt9_Any_dataOS1_+0x4): undefined reference to `millis'
sketch\FSBrowserPlus.ino.cpp.o:(.literal._ZNSt17_Function_handlerIFvP21AsyncWebServerRequestEZ5setupvEUlS1_E8_E9_M_invokeERKSt9_Any_dataOS1_+0x1c): undefined reference to `analogRead'
sketch\FSBrowserPlus.ino.cpp.o:(.literal._ZNSt17_Function_handlerIFvP21AsyncWebServerRequestEZ5setupvEUlS1_E8_E9_M_invokeERKSt9_Any_dataOS1_+0x20): undefined reference to `digitalRead'
sketch\FSBrowserPlus.ino.cpp.o:(.literal._Z9onWsEventP14AsyncWebSocketP20AsyncWebSocketClient12AwsEventTypePvPhj+0x70): undefined reference to `PCA9685::setChannelsValues(unsigned char, unsigned char, unsigned short*)'
sketch\FSBrowserPlus.ino.cpp.o:(.literal._Z5setupv+0x114): undefined reference to `PCA9685::begin()'
sketch\FSBrowserPlus.ino.cpp.o:(.literal._Z5setupv+0x118): undefined reference to `PCA9685::setFrequency(unsigned short)'
sketch\FSBrowserPlus.ino.cpp.o:(.literal.startup._GLOBAL__sub_I_ssid+0xc): undefined reference to `PCA9685::PCA9685(unsigned char)'
sketch\FSBrowserPlus.ino.cpp.o: In function `pca9685Off()':
C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/pca9685API.h:7: undefined reference to `PCA9685::setChannels(unsigned char, unsigned char, unsigned short)'
sketch\FSBrowserPlus.ino.cpp.o: In function `setGPIO(unsigned char, unsigned char)':
C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/gpioAPI.h:6: undefined reference to `pinMode'
C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/gpioAPI.h:26: undefined reference to `digitalWrite'
sketch\FSBrowserPlus.ino.cpp.o: In function `setChannel(unsigned char, unsigned short)':
C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/pca9685API.h:24: undefined reference to `PCA9685::setChannel(unsigned char, unsigned short)'
C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/pca9685API.h:25: undefined reference to `delay'
sketch\FSBrowserPlus.ino.cpp.o: In function `std::_Function_handler<void (AsyncEventSourceClient*), setup()::{lambda(AsyncEventSourceClient*)#5}>::_M_invoke(std::_Any_data const&, AsyncEventSourceClient*&&)':
c:\users\info\documents\arduinodata\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-80-g6c4433a-5.2.0\xtensa-esp32-elf\include\c++\5.2.0/functional:1871: undefined reference to `millis'
sketch\FSBrowserPlus.ino.cpp.o: In function `std::_Function_handler<void (AsyncWebServerRequest*), setup()::{lambda(AsyncWebServerRequest*)#10}>::_M_invoke(std::_Any_data const&, AsyncWebServerRequest*&&)':
C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/gpioAPI.h:35: undefined reference to `analogRead'
C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/gpioAPI.h:41: undefined reference to `digitalRead'
sketch\FSBrowserPlus.ino.cpp.o: In function `onWsEvent(AsyncWebSocket*, AsyncWebSocketClient*, AwsEventType, void*, unsigned char*, unsigned int)':
C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/pca9685API.h:32: undefined reference to `PCA9685::setChannelsValues(unsigned char, unsigned char, unsigned short*)'
C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/pca9685API.h:35: undefined reference to `delay'
sketch\FSBrowserPlus.ino.cpp.o: In function `setup()':
C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/gpioAPI.h:6: undefined reference to `pinMode'
C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/gpioAPI.h:6: undefined reference to `pinMode'
C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/gpioAPI.h:6: undefined reference to `pinMode'
C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/gpioAPI.h:6: undefined reference to `pinMode'
C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/gpioAPI.h:6: undefined reference to `pinMode'
sketch\FSBrowserPlus.ino.cpp.o: In function `setup()':
C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/pca9685API.h:12: undefined reference to `PCA9685::begin()'
C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/pca9685API.h:13: undefined reference to `PCA9685::setFrequency(unsigned short)'
C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/pca9685API.h:15: undefined reference to `PCA9685::setChannels(unsigned char, unsigned char, unsigned short)'
C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/pca9685API.h:16: undefined reference to `delay'
sketch\FSBrowserPlus.ino.cpp.o: In function `setup()':
C:\Users\info\Documents\Arduino\FSBrowserPlus/FSBrowserPlus.ino:287: undefined reference to `delay'
sketch\FSBrowserPlus.ino.cpp.o: In function `_GLOBAL__sub_I_ssid':
C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/pca9685API.h:3: undefined reference to `PCA9685::PCA9685(unsigned char)'
libraries\WiFi\WiFiGeneric.cpp.o:(.literal._Z9tcpipInitv+0x1c): undefined reference to `xTaskCreateUniversal'
libraries\WiFi\WiFiGeneric.cpp.o: In function `tcpipInit()':
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\libraries\WiFi\src/WiFiGeneric.cpp:264: undefined reference to `xTaskCreateUniversal'
libraries\WiFi\WiFiSTA.cpp.o: In function `WiFiSTAClass::waitForConnectResult()':
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\libraries\WiFi\src/WiFiSTA.cpp:718: undefined reference to `delay'
libraries\ESPAsyncWebServer-master\AsyncWebSocket.cpp.o: In function `AsyncWebSocketClient::AsyncWebSocketClient(AsyncWebServerRequest*, AsyncWebSocket*)':
C:\Users\info\Documents\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncWebSocket.cpp:853: undefined reference to `millis'
libraries\ESPAsyncWebServer-master\AsyncWebSocket.cpp.o: In function `AsyncWebSocketClient::ping(unsigned char*, unsigned int)':
C:\Users\info\Documents\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncWebSocket.cpp:853: undefined reference to `millis'
libraries\ESPAsyncWebServer-master\AsyncWebSocket.cpp.o: In function `AsyncWebSocketClient::_onPoll()':
C:\Users\info\Documents\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncWebSocket.cpp:853: undefined reference to `millis'
libraries\ESPAsyncWebServer-master\AsyncWebSocket.cpp.o: In function `AsyncWebSocketClient::_onAck(unsigned int, unsigned int)':
C:\Users\info\Documents\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncWebSocket.cpp:853: undefined reference to `millis'
libraries\ESPAsyncWebServer-master\SPIFFSEditor.cpp.o: In function `SPIFFSEditor::handleUpload(AsyncWebServerRequest*, String const&, unsigned int, unsigned char*, unsigned int, bool)':
C:\Users\info\Documents\Arduino\libraries\ESPAsyncWebServer-master\src/ESPAsyncWebServer.h:347: undefined reference to `millis'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(sccb.o): In function `SCCB_Read':
/home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/sccb.c:114: undefined reference to `pathToFileName'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(sccb.o): In function `SCCB_Write':
/home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/sccb.c:151: undefined reference to `pathToFileName'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(sccb.o): In function `SCCB_Read16':
/home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/sccb.c:190: undefined reference to `pathToFileName'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(sccb.o): In function `SCCB_Write16':
/home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/sccb.c:234: undefined reference to `pathToFileName'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(ov3660.o): In function `set_aec_value':
/home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/sensors/ov3660.c:147: undefined reference to `pathToFileName'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(ov3660.o):/home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/sensors/ov3660.c:147: more undefined references to `pathToFileName' follow
libraries\ArduinoOTA\ArduinoOTA.cpp.o:(.literal._ZN15ArduinoOTAClass5_onRxEv+0x10): undefined reference to `micros'
libraries\ArduinoOTA\ArduinoOTA.cpp.o: In function `ArduinoOTAClass::_onRx()':
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\libraries\ArduinoOTA\src/ArduinoOTA.cpp:181: undefined reference to `micros'
libraries\ArduinoOTA\ArduinoOTA.cpp.o: In function `ArduinoOTAClass::_runUpdate()':
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\libraries\ArduinoOTA\src/ArduinoOTA.cpp:271: undefined reference to `delay'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\libraries\ArduinoOTA\src/ArduinoOTA.cpp:328: undefined reference to `delay'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\libraries\ArduinoOTA\src/ArduinoOTA.cpp:334: undefined reference to `delay'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\libraries\ArduinoOTA\src/ArduinoOTA.cpp:343: undefined reference to `delay'
libraries\Update\Updater.cpp.o: In function `UpdateClass::_reset()':
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\libraries\Update\src/Updater.cpp:360: undefined reference to `digitalWrite'
libraries\SPIFFS\SPIFFS.cpp.o:(.literal._ZN2fs8SPIFFSFS6formatEv+0x0): undefined reference to `disableCore0WDT'
libraries\SPIFFS\SPIFFS.cpp.o:(.literal._ZN2fs8SPIFFSFS6formatEv+0x4): undefined reference to `enableCore0WDT'
libraries\SPIFFS\SPIFFS.cpp.o: In function `fs::SPIFFSFS::format()':
c:\users\info\documents\arduinodata\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-80-g6c4433a-5.2.0\xtensa-esp32-elf\include\c++\5.2.0\bits/shared_ptr_base.h:127: undefined reference to `disableCore0WDT'
c:\users\info\documents\arduinodata\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-80-g6c4433a-5.2.0\xtensa-esp32-elf\include\c++\5.2.0\bits/shared_ptr_base.h:127: undefined reference to `enableCore0WDT'
libraries\AsyncTCP-master\AsyncTCP.cpp.o: In function `_start_async_task()':
C:\Users\info\Documents\Arduino\libraries\AsyncTCP-master\src/AsyncTCP.cpp:1116: undefined reference to `xTaskCreateUniversal'
libraries\AsyncTCP-master\AsyncTCP.cpp.o: In function `AsyncClient::send()':
C:\Users\info\Documents\Arduino\libraries\AsyncTCP-master\src/AsyncTCP.cpp:1116: undefined reference to `millis'
libraries\AsyncTCP-master\AsyncTCP.cpp.o: In function `AsyncClient::AsyncClient(tcp_pcb*)':
C:\Users\info\Documents\Arduino\libraries\AsyncTCP-master\src/AsyncTCP.cpp:1116: undefined reference to `millis'
libraries\AsyncTCP-master\AsyncTCP.cpp.o: In function `AsyncClient::_sent(tcp_pcb*, unsigned short)':
C:\Users\info\Documents\Arduino\libraries\AsyncTCP-master\src/AsyncTCP.cpp:1116: undefined reference to `millis'
C:\Users\info\Documents\Arduino\libraries\AsyncTCP-master\src/AsyncTCP.cpp:1116: undefined reference to `millis'
libraries\AsyncTCP-master\AsyncTCP.cpp.o: In function `AsyncClient::_recv(tcp_pcb*, pbuf*, signed char)':
C:\Users\info\Documents\Arduino\libraries\AsyncTCP-master\src/AsyncTCP.cpp:1116: undefined reference to `millis'
libraries\AsyncTCP-master\AsyncTCP.cpp.o:C:\Users\info\Documents\Arduino\libraries\AsyncTCP-master\src/AsyncTCP.cpp:1116: more undefined references to `millis' follow
libraries\Wire\Wire.cpp.o:(.literal._ZN7TwoWire5flushEv+0x0): undefined reference to `i2cFlush'
libraries\Wire\Wire.cpp.o:(.literal._ZN7TwoWireD2Ev+0x4): undefined reference to `i2cRelease'
libraries\Wire\Wire.cpp.o:(.literal._ZN7TwoWire5beginEiij+0x0): undefined reference to `i2cInit'
libraries\Wire\Wire.cpp.o: In function `TwoWire::flush()':
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Stream.h:104: undefined reference to `i2cFlush'
libraries\Wire\Wire.cpp.o: In function `TwoWire::~TwoWire()':
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Stream.h:104: undefined reference to `i2cRelease'
libraries\Wire\Wire.cpp.o: In function `TwoWire::begin(int, int, unsigned int)':
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Stream.h:104: undefined reference to `i2cInit'
C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(HardwareSerial.cpp.o):(.literal._ZN14HardwareSerial5beginEmjaabm+0x4): undefined reference to `yield'
C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(HardwareSerial.cpp.o): In function `HardwareSerial::begin(unsigned long, unsigned int, signed char, signed char, bool, unsigned long)':
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Stream.h:104: undefined reference to `millis'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Stream.h:104: undefined reference to `millis'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Stream.h:104: undefined reference to `delay'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Stream.h:104: undefined reference to `yield'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(xclk.o): In function `camera_enable_out_clock':
/home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/xclk.c:23: undefined reference to `pathToFileName'
/home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/xclk.c:37: undefined reference to `pathToFileName'
C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(main.cpp.o):(.literal.app_main+0xc): undefined reference to `initArduino'
C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(main.cpp.o):(.literal.app_main+0x10): undefined reference to `xTaskCreateUniversal'
C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(main.cpp.o): In function `app_main':
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/main.cpp:26: undefined reference to `initArduino'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/main.cpp:27: undefined reference to `xTaskCreateUniversal'
C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(Stream.cpp.o): In function `Stream::timedRead()':
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Stream.cpp:76: undefined reference to `millis'
C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Stream.cpp:76: undefined reference to `millis'
collect2.exe: error: ld returned 1 exit status
Mehrere Bibliotheken wurden für "WiFi.h" gefunden
Benutzt: C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\libraries\WiFi
Nicht benutzt: C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.42.0_x86__mdqgnx93n4wtt\libraries\WiFi
exit status 1
Fehler beim Kompilieren für das Board ESP32 Dev Module.
Ungültige Bibliothek C:\Users\info\Documents\Arduino\libraries\Heltec_ESP32-master in keine Header-Dateien (.h) in C:\Users\info\Documents\Arduino\libraries\Heltec_ESP32-master gefunden gefunden
Reply 1 year ago
seems confilict with a old libraries, try remove folder: C:\Users\info\Documents\Arduino\libraries\Heltec_ESP32-master
1 year ago
NOTE: URL links given below have been corrected. If they do not work try copy and paste to a url address in your browser. 200926
Well done. I have not explored the article completely. But it is a "house" version of a squirrel chaser that is briefly discussed at https://create.arduino.cc/projecthub/redbug. Basically, this version is an out-door version of a semi-autonomous cat for chasing small critters. The rendering of the critter chaser is a gampead-arduino/uno-otg-android/tablet-wifi-mega256 vehicle. The strict limitations on the implementation are OpenSource and created with "parts on-hand". The project is described in detail at http://abbottanp.com/table_projects.html. Code artifacts have been loaded to github: https://github.com/trooker/a038_squirrel-chase. The final phase is still evolving. But field trials should begin by the end SEP 2020.
Once again well done on documenting your "cat". I may be able to leverage a couple of concepts you introduced. Thanks.
Reply 1 year ago
None of the 3 links you provide work.
Reply 1 year ago
I just confirmed what you observed.
See the attached images. They each have the "proper URL" displayed along the top.
I can not explain why the addresses provided above failed to link properly. "Instructables" may use some HMTL tag for setting the links of which I am not familiar: <a href="http://abbottanp.com">my-hompage </>. If you need more assistance copy/paste this url and look along the bottom of the webpage that is rendered for a hot link to an email form.
Mark.
Reply 1 year ago
The links don't work because they include the period at the end of the sentences.
Here's the 1st link's address - notice the period at the end. : https://create.arduino.cc/projecthub/redbug.
Reply 1 year ago
any image about your robot design?
Reply 1 year ago
Below you shall find a few pictures of the "gamepad", the squirrel chase vehicle, and three others that show the testing of the "gamepad's " joystick and A-Button active. The last three have not yet been uploaded to http://abbottanp.com/artifacts/squirrelChaser/index.html. But that site contains the technical details of the project (current as of SEP 7, 2020).