FatalError: Failed to connect to ESP8266
esptool.FatalError: Failed to connect to ESP8266 Error Time out waiting for packet header In Ubuntu Linux – In this article I want to share how to fix the Error ESP8266 cannot be programmed using the Arduino IDE. Here I use NodeMCU V3, for the serial usb used on the board is CH340G.
When I upload the program code, I get an error as shown in the following image.
I’ve been looking for a solution to this problem and in the end, I tried to reinstall the driver that I got from the CH340 official page, but apparently, I got the error again during the installation process like this:
neon@neon:~/Downloads/CH341SER_LINUX$ make
\make -C /lib/modules/5.4.0-89-generic/build M=/home/neon/Downloads/CH341SER_LINUX
make[1]: Entering directory '/usr/src/linux-headers-5.4.0-89-generic'
CC [M] /home/neon/Downloads/CH341SER_LINUX/ch34x.o
/home/neon/Downloads/CH341SER_LINUX/ch34x.c: In function ‘ch34x_close’:
/home/neon/Downloads/CH341SER_LINUX/ch34x.c:562:2: error: unknown type name ‘wait_queue_t’; did you mean ‘wait_event’?
562 | wait_queue_t wait;
| ^~~~~~~~~~~~
| wait_event
/home/neon/Downloads/CH341SER_LINUX/ch34x.c:573:24: error: passing argument 1 of ‘init_waitqueue_entry’ from incompatible pointer type [-Werror=incompatible-pointer-types]
573 | init_waitqueue_entry( &wait, current );
| ^~~~~
| |
| int *
In file included from ./include/linux/mmzone.h:10,
from ./include/linux/gfp.h:6,
from ./include/linux/slab.h:15,
from /home/neon/Downloads/CH341SER_LINUX/ch34x.c:21:
./include/linux/wait.h:79:66: note: expected ‘struct wait_queue_entry *’ but argument is of type ‘int *’
79 | ic inline void init_waitqueue_entry(struct wait_queue_entry *wq_entry, struct task_struct *p)
| ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
/home/neon/Downloads/CH341SER_LINUX/ch34x.c:574:36: error: passing argument 2 of ‘add_wait_queue’ from incompatible pointer type [-Werror=incompatible-pointer-types]
574 | add_wait_queue( &tty->write_wait, &wait );
| ^~~~~
| |
| int *
In file included from ./include/linux/mmzone.h:10,
from ./include/linux/gfp.h:6,
from ./include/linux/slab.h:15,
from /home/neon/Downloads/CH341SER_LINUX/ch34x.c:21:
./include/linux/wait.h:163:86: note: expected ‘struct wait_queue_entry *’ but argument is of type ‘int *’
163 | wait_queue(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry);
| ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
/home/neon/Downloads/CH341SER_LINUX/ch34x.c:578:5: error: implicit declaration of function ‘signal_pending’ [-Werror=implicit-function-declaration]
578 | signal_pending(current) || port->serial->disconnected )
| ^~~~~~~~~~~~~~
/home/neon/Downloads/CH341SER_LINUX/ch34x.c:585:39: error: passing argument 2 of ‘remove_wait_queue’ from incompatible pointer type [-Werror=incompatible-pointer-types]
585 | remove_wait_queue( &tty->write_wait, &wait );
| ^~~~~
| |
| int *
In file included from ./include/linux/mmzone.h:10,
from ./include/linux/gfp.h:6,
from ./include/linux/slab.h:15,
from /home/neon/Downloads/CH341SER_LINUX/ch34x.c:21:
./include/linux/wait.h:165:89: note: expected ‘struct wait_queue_entry *’ but argument is of type ‘int *’
165 | wait_queue(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry);
| ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
/home/neon/Downloads/CH341SER_LINUX/ch34x.c: In function ‘wait_modem_info’:
/home/neon/Downloads/CH341SER_LINUX/ch34x.c:756:3: error: implicit declaration of function ‘interruptible_sleep_on’ [-Werror=implicit-function-declaration]
756 | interruptible_sleep_on( &priv->delta_msr_wait );
| ^~~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:270: /home/neon/Downloads/CH341SER_LINUX/ch34x.o] Error 1
make[1]: *** [Makefile:1762: /home/neon/Downloads/CH341SER_LINUX] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-5.4.0-89-generic'
make: *** [Makefile:5: default] Error 2
A little frustrated, I tried to look at the NodeMCU hardware, maybe there is a damaged component, why the data can’t be uploaded. But all looks good.
I also connected a 10uF capacitor to the EN and GND pins. but the result is still an error.
So I feel this is a driver error. Maybe the Linux I’m using doesn’t match the kernel.
Here I am using Linux Mint 21.04 XFCE. After searching for so long I finally found a driver that someone had modified.
How to Fix ESP8266 Error Time Out Waiting For Packet Header
To fix this, I did a driver installation from that file. Files can be downloaded by clicking the following download button:
Download CH340 Linux Driver (Drive)
or
Download CH340 Linux Driver (MediaFire)
After the download is complete, please extract the file. Then open a terminal and navigate to the extracted folder. do the command make and sudo make load As shown in the following:
neon@neon:~/Downloads/CH341SER_LINUX$ make
make -C /lib/modules/5.4.0-89-generic/build M=/home/neon/Downloads/CH341SER_LINUX
make[1]: Entering directory '/usr/src/linux-headers-5.4.0-89-generic'
CC [M] /home/neon/Downloads/CH341SER_LINUX/ch341.o
Building modules, stage 2.
MODPOST 1 modules
CC [M] /home/neon/Downloads/CH341SER_LINUX/ch341.mod.o
LD [M] /home/neon/Downloads/CH341SER_LINUX/ch341.ko
make[1]: Leaving directory '/usr/src/linux-headers-5.4.0-89-generic'
neon@neon:~/Downloads/CH341SER_LINUX$ sudo make load
[sudo] password for neon:
modprobe usbserial
insmod ch341.ko
After that, open Arduino IDE, select Port and upload the program to Node MCU ESP8266 and Done.