diff --git a/esphome/dashboard/dashboard.py b/esphome/dashboard/dashboard.py
index 5967c95aba..fc7d772aac 100644
--- a/esphome/dashboard/dashboard.py
+++ b/esphome/dashboard/dashboard.py
@@ -509,8 +509,8 @@ class EsphomeUpdateAllHandler(EsphomeCommandWebSocket):
 
 class SerialPortRequestHandler(BaseHandler):
     @authenticated
-    def get(self):
-        ports = get_serial_ports()
+    async def get(self):
+        ports = await tornado.ioloop.IOLoop.run_in_executor(None, get_serial_ports)
         data = []
         for port in ports:
             desc = port.description