快乐男人 發表於 2019-12-6 02:10:00

ubuntu系统搭建ESP32 开发环境

<h1 id="前言">前言</h1>
<p>ESP32 可以说是物联网市场一款比较精悍的芯片了。集成了BLE和802.11b Wi-Fi。低功耗、同时处理速度还挺强的。目前自己也是刚入手ESP32。可是在装环境的时候,踩了不少坑。<br>
当然ESP32 支持的开发方式挺多的。例如在 arduino开发,windows下的msys32加esp-idf的开发环境(因为msys32 是虚拟一个linux环境,所以这种方式编译程序会比较慢),也可以用Eclipse IDE+CMake+esp-idf开发,还有可以使用linux 系统下的GNU Make + esp-idf 开发。<br>
本人使用的是linux系统下的开发环境。这里就不扯了,下面开始填坑之路。<br>
环境的安装主要参考&lt;乐鑫官网&gt;。<br>
(注意:因为在安装环境的过程中需要下载比较多的库和工具,所以要保证网络通畅)</p>
<h1 id="一安装准备">一、安装准备</h1>
<blockquote>
<ul>
<li>这里使用linux发行版本是<code>ubuntu 16.04 LTS</code></li>
<li>需要的基本环境还有<code>python2</code>和<code>git</code>工具(没有这些的工具的可以百度安装)</li>
<li><code>mkdir -p ~/esp32/source ~/esp32/crossTool ~/esp32/demos</code> 使用这个命令创建好这些目录</li>
</ul>
</blockquote>
<h3 id="1更新ubuntu的源">1、更新ubuntu的源</h3>
<blockquote>
<ol>
<li>为了后面能正常安装工具,最好更新一下源。同时最好将源切换为国内的源。ubuntu 系统的是如下命令更新源,其他的Linux 发行版本可以百度更新:</li>
</ol>
<ul>
<li><code>sudo apt-get install update</code></li>
</ul>
<ol start="2">
<li>因为安装esp32环境的过程中需要安装python的库,所以这里也最好将 pip 工具更新到最新版本。目前最新的版本是19.3.1,使用下面命令更新,如果不是最新版本一般都能正常更新。</li>
</ol>
<ul>
<li><code>sudo python -m pip install --default-timeout=100 --upgrade pip</code></li>
</ul>
</blockquote>
<h3 id="2出错处理">2、出错处理:</h3>
<blockquote>
<p>pip工具更新到最新版本之后,使用<code>pip install 安装包</code>有可能会出现下面的错误:</p>
</blockquote>
<pre><code># 错误的原因是新版本的库找不到 main 模块了
Traceback (most recent call last):
File "/usr/bin/pip", line 9, in &lt;module&gt;
from pip import main
ImportError: cannot import name 'main'
</code></pre>
<blockquote>
<p>解决的方法是修改 <code>/usr/bin/pip</code> 源程序<br>
用<code>sudo vi /usr/bin/pip</code> 命令打开源程序<br>
然后按照下面的方式修改,修改完之后应该就不会报错了</p>
</blockquote>
<pre><code>################修改前程序####################

import sys
from pip import main
if __name__ == '__main__':
    sys.exit(main())

################修改前程序####################



################修改后程序####################

import sys
from pip import __main__# 这行修改
if __name__ == '__main__':
    sys.exit(__main__._main()) #这行修改

################修改后程序####################

</code></pre>
<h3 id="3按装依赖包">3、按装依赖包</h3>
<blockquote>
<p>在&lt;乐鑫官网&gt;中的提到<code>ununtu</code>系统(其他系统或发行版本可以去官网查看)需要安装下面的依赖包。执行下面命令即可,或者去官网查看。</p>
</blockquote>
<p><code>sudo apt-get install gcc git wget make flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing python-pyelftools</code></p>
<h1 id="二交叉工具">二、交叉工具</h1>
<h3 id="1下载交叉工具xtensa-esp32-elf">1、下载交叉工具(xtensa-esp32-elf)</h3>
<blockquote>
<p>&lt;乐鑫官网&gt;这个页面有交叉工具的下载连接,如果下面给的这个链接下载不了,可以去官网复制,然后替换掉下面的链接(注意自己的是32系统还是64位系统)。然后执行下面的命令来下载 。(尽量下载官方最新稳定的工具和库)</p>
<ol>
<li><code>cd ~/esp32/crossTool/</code></li>
<li><code>wget -c https://dl.espressif.com/dl/xtensa-esp32-elf-gcc8_2_0-esp-2019r2-linux-amd64.tar.gz</code></li>
<li><code>tar zxvf xtensa-esp32-elf-gcc8_2_0-esp-2019r2-linux-amd64.tar.gz</code> 具体的包名以下载的为准</li>
</ol>
</blockquote>
<h3 id="2设置交叉工具的环境变量">2、设置交叉工具的环境变量</h3>
<blockquote>
<p>执行下面的步骤来设置环境变量<br>
1、使用 <code>sudo vi ~/.profile </code>命令打开这个文件<br>
2、在<code>.profile</code>最后一行添加<code>export PATH="$HOME/esp32/crossTool/xtensa-esp32-elf/bin:$PATH"</code><br>
3、执行<code>reboot</code> 命令重启系统,重启后交叉工具环境变量就起效了<br>
4、<code>echo $PATH</code> 看一下有没有设置成功</p>
</blockquote>
<h1 id="三源码库下载">三、源码库下载</h1>
<h3 id="1下载源码库esp-idf">1、下载源码库(esp-idf)</h3>
<blockquote>
<ul>
<li>&lt;乐鑫官网&gt;有库esp-idf的链接,如果下面的链接访问不了,可以去官网查看,或者自行去<code>github</code> 搜 <code>esp-idf</code> 库然后下载。</li>
<li>注意事项: 用 <code>git</code> 下载的时候一定要加 <code>--recursive</code> 选项,因为在下载完库之后还要下载比较多的依赖种子。如果不下载依赖种子的话后面编译的时候会报各种奇怪的错误例如: 找不到 <code>micro-ecc</code>目录之类的。 如果没加 <code>--recursive</code> 选项, 下载完之后需要执行 <code>cd ~/esp32/source/</code> 和 <code>git submodule update --init</code> 命令。</li>
<li>执行下面的命令下载 <code>esp-idf</code> 源码库</li>
<li>
<blockquote>
<ol>
<li><code>cd ~/esp32/source/</code></li>
</ol>
</blockquote>
</li>
</ul>
<blockquote>
<ol start="2">
<li><code>git clone --recursive https://github.com/espressif/esp-idf.git</code></li>
</ol>
</blockquote>
</blockquote>
<h3 id="2设置环境变量">2、设置环境变量</h3>
<blockquote>
<p>执行下面的步骤来设置<code>esp-idf</code>环变境量<br>
1、使用 <code>sudo vi ~/.profile </code>命令打开这个文件<br>
2、在<code>.profile</code>最后一行添加<code>export IDF_PATH="$HOME/esp32/source/esp-idf"</code><br>
3、执行<code>reboot</code> 命令重启系统,重启后交叉工具环境变量就起效了<br>
4、<code>echo $IDF_PATH</code> 看一下有没有设置成功</p>
</blockquote>
<h1 id="四安装-python-软件包">四、安装 Python 软件包</h1>
<blockquote>
<p>在这个过程几乎是绝望的,可能是网络不好然后导致下载软件包下载老是超时失败。经历过好几十次的尝试之后,最终把坑给填上了。下面来介绍一下填坑的办法。</p>
</blockquote>
<h3 id="1官方安装方法">1、官方安装方法</h3>
<blockquote>
<p>官方是执行下面的命令安装的。个人在这个过程中只能能下在前面一两个软件包,然后就报超时失败了。历经几十遍的尝试,最后我放弃了。如果能全部下安装完成就不用执行下面的解决办法了</p>
<ul>
<li><code>python -m pip install --user -r $IDF_PATH/requirements.txt</code></li>
</ul>
</blockquote>
<h3 id="2解决办法一">2、解决办法一</h3>
<blockquote>
<p>在官方给的基础上增加了超时限制。命令如下:</p>
<ul>
<li>python -m pip install --default-timeout=100 --user -r $IDF_PATH/requirements.txt</li>
<li>虽然增加了超时限制,但是还是会报超时异常。而且这种方式安装有个缺点,就是报超时异常之后,下一次尝试之后又要全部重新下载。当然如果顺利的话就可以下载完了。又经历了几十遍之后,我真的要绝望了。然后果断放弃这种方法。</li>
</ul>
</blockquote>
<h3 id="3解决办法二">3、解决办法二</h3>
<blockquote>
<p>方法二这个方法就是查看 <code>$IDF_PATH/requirements.txt</code> 文件的作用是什么。文件的内容如下</p>
</blockquote>
<pre><code># This is a list of python packages needed for ESP-IDF. This file is used with pip.
# Please see the Get Started section of the ESP-IDF Programming Guide for further information.
#
#查看 setuptools 软件包的版本是否大于或者等于 21
setuptools&gt;=21
# The setuptools package is required to install source distributions and on some systems is not installed by default.
# Please keep it as the first item of this list. Version 21 is required to handle PEP 508 environment markers.
#

click&gt;=5.0#比较 click 软件包的版本是否大于或者等于 5.0
pyserial&gt;=3.0#比较 pyserial 软件包的版本是否大于或者等于 3.0
future&gt;=0.15.2 #比较 future 软件包的版本是否大于或者等于 0.15.2
cryptography&gt;=2.1.4 #比较 cryptography 软件包的版本是否大于或者等于 2.1.4
pyparsing&gt;=2.0.3,&lt;2.4.0 #比较 pyparsing软件包的版本是否大于或者等于 2.0.3 并且 小于 2.4.0
pyelftools&gt;=0.22 #比较 pyelftools 软件包的版本是否大于或者等于 0.22
# windows-curses are required in Windows command line but cannot be installed in MSYS2. A requirement like
# "windows-curses; sys_platform == 'win32'" would want to install the package on both of them. There is no environment
# marker for detecting MSYS2. So instead, a dummy custom package is used with "windows-curses" dependency for Windows
# command line.
file://${IDF_PATH}/tools/kconfig_new/esp-windows-curses; sys_platform == 'win32'
</code></pre>
<blockquote>
<p>大概了解到这个文件的内容之后,就是用命令来一个一个的更新,虽然有些软件包还是下载超时,但是至少能正常的安装部分了。安装的命令如下:</p>
<ol>
<li><code>sudo pip install --default-timeout=100--upgrade setuptools</code></li>
<li><code>sudo pip install --default-timeout=100--upgrade click </code></li>
<li><code>sudo pip install --default-timeout=100--upgrade pyserial </code></li>
<li><code>sudo pip install --default-timeout=100--upgrade future </code></li>
<li><code>sudo pip install --default-timeout=100--upgrade cryptography </code></li>
<li><code>sudo pip install --default-timeout=100--upgrade pyparsing </code></li>
<li><code>sudo pip install --default-timeout=100--upgrade pyelftools </code></li>
</ol>
</blockquote>
<blockquote>
<p>如果上面的步骤都可以正常安装,然后就在执行一下下面的命令,看一下版本又没都正确或者没有少什么依赖库,如果全部检查通过,并且没有下载的过程就说明环境搭建完成了。如果还有的软件包下载超时,可以查看往下看 《解决办法三》</p>
<ul>
<li><code>python -m pip install --user -r $IDF_PATH/requirements.txt </code></li>
</ul>
</blockquote>
<h3 id="3解决办法三">3、解决办法三</h3>
<blockquote>
<p>这个办法是最后的一个办法了,如果这个在解决不了,我也就没辙了。这个办法就是去 Python packages官网下载离线软件包来安装。直接在官网上搜索上面的方法还没能完成的python软件包,然后下载对应的版本(这个可以在上面的方法下载的过程中能看到),然后使用浏览器下载下来。<br>
下面我以<code>cryptography</code>软件包为例:</p>
</blockquote>
<blockquote>
<ul>
<li>在 Python packages官网 中搜索 <code>cryptography</code>软件包,如下图:<br>
<img src="https://img2018.cnblogs.com/blog/1627979/201912/1627979-20191206013642503-410188503.png" alt="" loading="lazy"></li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>我在命令行下载的过程下载的是<code>cryptography-2.8-cp27-cp27mu-manylinux2010_x86_64</code> 版本,所以选择 <code>cryptography 2.8</code> 的版本, 如下图:<br>
<img src="https://img2018.cnblogs.com/blog/1627979/201912/1627979-20191206014247279-1901462614.png" alt="" loading="lazy"></li>
<li>找到 <code>cryptography-2.8-cp27-cp27mu-manylinux2010_x86_64.whl</code> 软件包然后下载<br>
<img src="https://img2018.cnblogs.com/blog/1627979/201912/1627979-20191206014543605-913366707.png" alt="" loading="lazy"></li>
</ul>
</blockquote>
<blockquote>
<p>下载完之后 在本地中找到 <code>cryptography-2.8-cp27-cp27mu-manylinux2010_x86_64.whl</code>(一般在 <code>~/Downloads/</code> 目录中),然后执行下面的命令安装:</p>
<ul>
<li><code>sudo pip install --default-timeout=100 ~/Downloads/cryptography-2.8-cp27-cp27mu-manylinux2010_x86_64.whl</code></li>
<li><code>python -m pip install --user -r $IDF_PATH/requirements.txt</code> 检查一下还有没有需要安装的</li>
</ul>
</blockquote>
<blockquote>
<p>经历上面的方法应该可以将python的软件包按转完成</p>
</blockquote>
<h1 id="五编译第一个demo">五、编译第一个demo</h1>
<blockquote>
<p>编译和烧写的过程可以参考乐鑫官网,这里就不过多介绍了,上面的的环境都安装成功了,一般都能正确编译。烧写的过程可能需要改一下串口的权限。环境装好了,剩下就靠自己去怎么耍了。如果个人以后做了什么比较好玩的demo也会更新上来。</p>
</blockquote><br><br>
来源:https://www.cnblogs.com/gulan-zmc/p/11992359.html
頁: [1]
查看完整版本: ubuntu系统搭建ESP32 开发环境