第1ç« æ ‘èŽ“æ´¾ç®€ä»‹ ······················································································1 引言·················································1 1.1 æ ‘èŽ“æ´¾æ˜¯ä»€ä¹ˆï¼Ÿ ···························1 1.2 æ ‘èŽ“æ´¾å‘¨è¾¹é…ä»¶ ··························11 1.3 æ ‘èŽ“æ´¾èƒ½åšä»€ä¹ˆï¼Ÿ ·······················12 第2ç« æ ‘èŽ“æ´¾å…¥é—¨åŸºç¡€çŸ¥è¯† ·····································································21 2.1 系统选型 ···································21 2.2 新系统下载åŠçƒ§å½• ·······················23 2.3 æ¢å¤å¡åˆ¶ä½œçš„æ“ä½œæ¥éª¤ ·················24 2.3.1 方法1················································24 2.3.2 方法2················································24 2.4 烧录系统 ···································24 2.5 åˆå§‹åŒ–系统 ································29 第3ç« æ ‘èŽ“æ´¾GPIO的使用 ·······································································46 3.1 GPIO的概念åŠç›¸å…³åº“的使用方法 ···46 3.2 æ ‘èŽ“æ´¾ä¸Šä½¿ç”¨wiringPi库 ···············47 3.3 如何利用wiringPi优雅地点亮一个 LEDç¯ Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·51 3.3.1 ç¡¬ä»¶ææ–™å‡†å¤‡Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·51 3.3.2 接线方å¼Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·51 3.3.3 ç¼–å†™ä»£ç æµ‹è¯•··································52 3.4 çŽ©è½¬æµæ°´ç¯å’Œæ¸¸ä¾ ç¯ Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·58 3.4.1 æµæ°´ç¯Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·58 3.4.2 æ¸¸ä¾ ç¯Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·59 第4ç« æ ‘èŽ“æ´¾ä¸I2C功能的使用 ································································61 4.1 I2C的概念 ··································61 4.2 I2C实战å°é¡¹ç›® ····························62 4.2.1 接线方å¼Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·62 4.2.2 å¯ç”¨I2Cé…ç½® ····································63 ç›® 录 IV æ ‘èŽ“æ´¾4 与人工智能实战项目 4.2.3 检测Slaveè®¾å¤‡çŠ¶æ€ Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·65 4.2.4 查询寄å˜å™¨è¡¨å¹¶ç®€å•测试··············65 4.2.5 编写Cè¯è¨€æµ‹è¯•代ç ·······················66 4.2.6 编写Python代ç 进行测试 ··············68 4.2.7 关于Pythonä¸çš„I2C函数 ·················69 4.3 使用I2Cå议的其他应用 ················70 4.3.1 点亮LCD1602æ¶²æ™¶å±æ˜¾ç¤ºæ ‘莓派 çš„IPåœ°å€ Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·70 4.3.2 利用OLEDå±•ç¤ºæ ‘èŽ“æ´¾ç£ç›˜çŠ¶æ€ ä¿¡æ¯Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·83 第5ç« æ ‘èŽ“æ´¾SPI介ç»åŠåº”用实例 ···························································· 88 5.1 SPIå议简介 ······························88 5.1.1 SPIå议概述 ····································88 5.1.2 SPI的优缺点 ····································88 5.1.3 采用主-从模å¼ï¼ˆMaster-Slave)的 控制方å¼Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·89 5.2 æ ‘èŽ“æ´¾SPI概述 ···························89 5.2.1 引脚和GPIOæ˜ å°„ ····························89 5.2.2 关于SPI的速度 ································90 5.3 æ ‘èŽ“æ´¾ä¸Šå¯ç”¨SPI功能 ··················90 5.3.1 通过raspi-config工具 ······················91 5.3.2 通过编辑/boot/config.txt文件 ·········93 5.3.3 通过图形界é¢Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·93 5.4 æ ‘èŽ“æ´¾SPI应用实例 ·····················95 5.4.1 检查SPIè®¾å¤‡çŠ¶æ€ Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·95 5.4.2 准备SPIå¤–è®¾å¹¶æŽ¥å…¥æ ‘èŽ“æ´¾ ············95 5.4.3 安装Python库文件 ··························96 5.4.4 编写定制的测试代ç 并进行测试 ····97 5.5 è®©æ ‘èŽ“æ´¾å˜èº«ä¸ºä¸€ä¸ªçŽ¯å¢ƒæ£€æµ‹ç«™ ··· 101 5.5.1 BME280模å—ä»‹ç» Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·102 5.5.2 接线方å¼Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·103 5.5.3 编写代ç èŽ·å–æ•°æ®Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·103 5.5.4 总结················································112 第6ç« æ ‘èŽ“æ´¾UART串å£ä»‹ç»åŠåº”用实例 ··············································· 113 6.1 UART简介 ······························· 113 6.2 æ ‘èŽ“æ´¾ä¸²å£è¯´æ˜Ž ························ 114 6.3 åœ¨æ ‘èŽ“æ´¾ä¸Šé…ç½®å¯ç”¨UART ·········· 115 6.4 åœ¨æ ‘èŽ“æ´¾ä¸Šè¿›è¡Œä¸²å£é€šä¿¡ ············ 120 6.4.1 使用Python è¯è¨€å®žçŽ°ä¸²å£ é€šä¿¡ ······························· 120 6.4.2 通过Cè¯è¨€å®žçް䏲å£é€šä¿¡ ·············123 6.4.3 拓展实例········································124 6.5 å…³äºŽæ ‘èŽ“æ´¾ä¸²å£åˆ«ååŠåˆ‡æ¢ ç¡¬ä»¶ä¸²å£ Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â· 126 6.5.1 串å£åˆ«å········································126 6.5.2 æ›´æ¢ä¸²å£ç«¯å£Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·127 6.6 总结 ······································· 128 第7ç« æ ‘èŽ“æ´¾PWM介ç»åŠåº”用实例 ·······················································129 引言·············································· 129 7.1 PWMæŽ§åˆ¶åŽŸç† Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â· 129 目录 V 7.2 æ ‘èŽ“æ´¾PWM通é“ä¿¡æ¯ Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â· 130 7.3 wiringPi库的PWM接å£ä»‹ç» ········· 131 7.3.1 硬件PWM ······································131 7.3.2 软件PWM ····································132 7.3.3 软件PWM注æ„事项 ······················133 7.4 PWM应用项目实战 ···················· 134 7.4.1 呼å¸ç¯æ•ˆæžœÂ·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·134 7.4.2 舵机控制········································138 第8ç« æ ‘èŽ“æ´¾å¼€æºç½‘络应用实例 ·····························································144 引言·············································· 144 8.1 æ ‘èŽ“æ´¾æå»ºRTMPæµåª’体æœåС噍 ···· 145 8.1.1 安装NginxåŠæ¨¡å—··························145 8.1.2 å¯ç”¨RTMP ·····································148 8.1.3 客户端连接测试····························151 8.2 æ ‘èŽ“æ´¾æå»ºSamba文件æœåС噍 ······· 156 8.2.1 什么是Samba文件æœåС噍 ·············156 8.2.2 需è¦å‡†å¤‡çš„设备····························156 8.2.3 安装é…ç½®SambaæœåС噍 ·················157 8.3 æ ‘èŽ“æ´¾æå»ºNFS文件æœåС噍 ········· 163 8.3.1 什么是NFS文件æœåС噍 ················163 8.3.2 需è¦çš„设备····································163 8.3.3 安装é…ç½®NFS文件系统 ················163 8.4 æ ‘èŽ“æ´¾æå»ºæ—¥å¿—æœåС噍 ··············· 169 8.4.1 什么是日志æœåŠ¡å™¨Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·169 8.4.2 需è¦çš„硬件····································170 8.4.3 安装rsyslogæœåŠ¡ ····························170 8.4.4 é…ç½®rsyslog作为æœåС噍 ················170 8.4.5 创建新模æ¿Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·171 8.4.6 é‡å¯æœåŠ¡å¹¶æµ‹è¯•Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·172 8.5 æ ‘èŽ“æ´¾æå»ºMariaDBæ•°æ®åº“ æœåС噍 ···································· 175 8.5.1 什么是MariaDB ····························175 8.5.2 MariaDB å’Œ MySQL 的区别 ········175 8.5.3 安装MariaDB ································176 8.5.4 é…ç½®MariaDB ································176 8.5.5 创建一个数æ®åº“····························178 8.5.6 æ·»åŠ ä¸€å¼ è¡¨Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·179 8.5.7 æ’å…¥å‡ æ¡è®°å½•································180 8.6 æ ‘èŽ“æ´¾æå»ºPostgreSQLæ•°æ® åº“æœåС噍 ································· 182 8.6.1 什么是PostgreSQLæ•°æ®åº“ ············182 8.6.2 安装PostgreSQL ····························182 8.6.3 é…ç½®PostgreSQL ····························182 8.6.4 创建数æ®åº“····································183 8.6.5 å¸¸è§æŽ§åˆ¶å°å‘½ä»¤Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·184 8.6.6 基本SQLè¯å¥ ·······························185 8.7 æ ‘èŽ“æ´¾æå»ºMosquitto MQTT æœåС噍 ··································· 186 8.7.1 什么是MQTTæœåС噍 ····················186 8.7.2 安装Mosquitto æœåС噍 ··················187 8.7.3 检测æœåŠ¡å™¨çŠ¶æ€Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·187 8.7.4 åœ¨æ ‘èŽ“æ´¾ä¸Šæµ‹è¯•Mosquittoä»£ç† Â·Â·Â·187 8.7.5 多主机测试····································189 8.7.6 å°è¯•使用Pythonçš„paho-mqtt库 ····190 8.8 æ ‘èŽ“æ´¾æå»ºDHCPæœåС噍 ············· 193 8.8.1 什么是DHCPæœåС噍 ·····················193 8.8.2 测试环境········································193 8.8.3 é…ç½®1å·ä¸»æœºDHCPæœåŠ¡ ···············194 8.8.4 修改DHCPæœåŠ¡çš„é…ç½® ·················194 VI æ ‘èŽ“æ´¾4 与人工智能实战项目 8.8.5 é‡å¯æœåŠ¡ä»¥ç”Ÿæ•ˆé…置····················195 8.8.6 å¼€å¯è·¯ç”±è½¬å‘································195 8.8.7 é…ç½®IPtables实现æµé‡è·¯ç”± ···········196 8.8.8 注æ„事项········································196 8.9 总结 ······································· 197 第9ç« æ ‘èŽ“æ´¾ä¸Šåˆ©ç”¨TensorFlow实现对象检测 ······································198 引言·············································· 198 9.1 è½¯ç¡¬ä»¶çŽ¯å¢ƒä»‹ç» Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â· 198 9.1.1 硬件准备········································198 9.1.2 软件准备········································199 9.2 æ“作æ¥éª¤ ································· 199 9.2.1 更新系统åŠè½¯ä»¶ä»“库 ···················199 9.2.2 创建TensorFlow的工作目录 ·······199 9.2.3 安装TensorFlowçš„Python库和部分 ä¾èµ–················································200 9.2.4 安装OpenCV视觉框架 ·················200 9.2.5 编译安装Protobuf组件··················201 9.2.6 é‡å¯ç³»ç»ŸÂ·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·203 9.2.7 釿–°ç™»å½•系统并设置TensorFlow 目录结构 ·······································203 9.2.8 下载TensorFlow模型 ····················204 9.2.9 修改用户åˆå§‹åŒ–é…置文件············204 9.2.10 利用protoc编译Protocol Buffer 文件 ·············································204 9.2.11 下载ssdlite_mobilenet_v2_coco 模型··············································205 9.3 对象检测测试 ··························· 205 9.3.1 åœ¨æ ‘èŽ“æ´¾ä¸Šå¯ç”¨æ‘„åƒå¤´Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·205 9.3.2 下载检测脚本································205 9.3.3 接入摄åƒå¤´Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·206 9.3.4 执行脚本并进行检测····················206 9.4 总结 ······································· 208 第10ç« æ ‘èŽ“æ´¾æ‰«æä»ªâ€”æ ‘èŽ“æ´¾+OpenCV ···········································209 引言·············································· 209 10.1 åŽŸç† Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â· 209 10.2 硬件准备 ······························· 210 10.3 软件准备 ······························· 211 10.3.1 软件包版本信æ¯Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·211 10.3.2 查看软件版本的方法··················211 10.4 é…置环境 ······························· 212 10.4.1 检查网络状æ€Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·212 10.4.2 更新软件仓库并安装软件··········212 10.4.3 创建并激活虚拟环境 ··················213 10.4.4 å¯ç”¨æ‘„åƒå¤´Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·213 10.5 代ç 调试 ······························· 215 10.6 应用拓展 ······························· 219 10.7 总结 ····································· 221 第11ç« AIæ¢é¼»åâ€”æ ‘èŽ“æ´¾+OpenCV ··················································222 引言·············································· 222 11.1 AIæ¢é¼»åçš„åŽŸç† Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â· 223 目录 VII 11.2 硬件需求 ······························· 223 11.3 软件需求 ······························· 223 11.3.1 Raspbianæ“作系统 ·······················223 11.3.2 Python3 环境 ·······························224 11.3.3 virtualenv环境 ·····························225 11.3.4 dlib库 ··········································226 11.3.5 shape_predictor工具和get_frontal_ face_detector函数 ························226 11.3.6 预测模型库下载 ·························228 11.4 æ“作æ¥éª¤ ······························· 228 11.4.1 烧录镜åƒï¼Œå¯åŠ¨å¹¶å®Œæˆåˆå§‹åŒ– é…置··············································228 11.4.2 å¯åŠ¨æ ‘èŽ“æ´¾Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·232 11.4.3 接入摄åƒå¤´Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·Â·236 11.4.4 系统åˆå§‹åŒ–环境调试··················237 11.4.5 æ ‘èŽ“æ´¾æ‘„åƒå¤´æµ‹è¯•······················239 11.4.6 编写代ç ······································239 11.5 å¼€æŒ–è„‘æ´žï¼Œå‘æ•£æ€ç»´ ················ 262 11.6 总结 ····································· 262 第12ç« æ ‘èŽ“æ´¾é€šè¿‡U盘å¯åŠ¨ç³»ç»Ÿ ····························································263 引言·············································· 263 12.1 硬件需求 ······························· 263 12.2 剿œŸå‡†å¤‡ ······························· 264 12.3 æ›´æ–°å‡çº§ç³»ç»Ÿ ························· 264 12.4 æ›´æ–°bootloader ························ 264 12.5 检查å¯åЍ选项 ························· 265 12.6 æ— å¡å¯åŠ¨æµ‹è¯• ························· 268 12.7 制作USBå¯åŠ¨ç›˜ ······················ 268