DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: lilm3m0
今日帖子: 5
在线用户: 20
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2018/9/12 0:41:33
标题:
[记录]关于INDY TIdTCPClient 与 RTC TRtcTcpClient 在发送16进制的比较 浏览:4352
加入我的收藏
楼主: 最近跟儿子一起制作WiFi智能小车。小车端支持WiFi连接 TCP Server 接收16进制指令控制动作。现在编写安卓客户端,其中关于 TCP Client 的测试记录如下。

编译平台:FMX 10.1.2
INDY TIdTCPClient:自带版本
RTC TRtcTcpClient:v6.42 (2014.Q3)

HexToString函数采用 "earthsbest (全能中间件)"大神提供的代码,连接在这里:
http://bbs.2ccc.com/topic.asp?topicid=541964

以前在D7时代使用过Indy的TCP Client发送HEX,是非常简单的:
IdTCPClient1.Write(HexToString('FF000000FF'))

在新版的FMX中,这样使用接收到的信息是错误的。通过搜索资料发现,现在新版的Indy,而且还要跨平台,发送的时候可以指定不同的编码,所以应该是:
IdTCPClient1.IOHandler.Write(HexToString('FF000000FF'), IndyTextEncoding(TEncoding.ANSI));
另外没有考究与下面这个是不是一样的功能:
IdTCPClient1.Socket.Write()
但WriteLn在我这里是不能使用的,因为会自行加入换行符。



另外自己一直在使用RTC。RTC中也是有Tcp Client,所以也测试一番:
RtcTcpClient1.Write(HexToString('FF000000FF'));
接收是错误的,经过一轮测试发现16进制大于80(即十进制的128)就会变成3F。

也是编码问题,通过论坛搜索,也感谢全能大神提供资料,改用这样发送:
RtcTcpClient1.WriteEx(RtcByteArray(TEncoding.ANSI.GetBytes(HexToString('FF000000FF'))));
接收正确。


作为 TCP Client Indy与RTC都支持跨平台,对于我个人来说会喜欢RTC的多一点。其中有两点:
1、RTC轻量、稳定
2、Indy的事件机制不好,小车的SERVER端如果掉线或者重启等(还有就是小车跑到信号不好的地方),经常会出现SOCKET出错提示,又没有连接异常事件去屏蔽。所以笨的方法是在每次发送前先判断是否连接正常,如果异常就断开连接,免得产生出错。RTC的事件会非常好的控制。
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2018/9/12 8:30:13
1楼: 按此在新窗口浏览图片
lz 用的啥mcu模块啊。。
为何不用网页 bin?
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 wg961423 (麦子仲肥) ★☆☆☆☆ -
盒子活跃会员
2018/9/12 8:32:35
1楼: Indy短连接就没有问题了!
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2018/9/12 8:41:13
2楼: 骂人的词已经删除
都是 Bytes 要个屁的 string
----------------------------------------------
(C)(P)Flying Wang
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2018/9/12 11:32:20
3楼: @wang_80919 (Flying Wang) 

猫哥,别太燥啊,哈哈。其实昨晚发完贴我就觉得有问题,但是太晚了,真的太困了,所以打算今天才修正的。被你发现了。。。

RTC TcpClient 发送16进制方法:

function HexToBytes(const Value: string): TBytes;
var
  Length: Integer;
  InBytes: TBytes;
begin
  InBytes := TEncoding.ANSI.GetBytes(Value);
  Length  := System.Length(InBytes) shr 1;
  SetLength(Result, Length);
  System.Classes.HexToBin(InBytes, 0, Result, 0, Length);
end;

RtcTcpClient1.WriteEx(RtcByteArray(HexToBytes(Value)));
----------------------------------------------
-
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2018/9/12 11:54:29
4楼: 做了两台。
第一台:
1、TPLink 703N 刷OpenWrt  + Ser2net
2、整合L298N + 多路PWM舵机接口的一体单片机板
功能:WiFi接入,TTL输出串口控制信号,以控制电机、舵机、云台等等。并且可以接入多种传感器模块。由于采用路由器,所有支持USB摄像头视频输出。

第二台:
1、51单片机最小系统
2、物联网ESP8266EX芯片
功能:WiFi接入,TTL输出串口控制信号。不能接入摄像头

@keymark (keymark)
为何不用网页?由于控制端要兼容买的那块单片机,所以折中选择。

最后提一下ESP8266EX真的是太强大大,其实ESP8266EX直接有IO接入L298N驱动模块的,但是考虑到兼容两个板的问题,也就算了,采用串口输出好了。
之前考虑过用什么NRF24L01、Zigbee CC2530这些芯片作为无线控制,但是接收端和控制端都要配套,也要写下位机,麻烦,相对价格也贵。

做完小车下一步就是用ESP8266EX做一个智能插座、智能电表。。。呵呵
----------------------------------------------
-
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2018/9/12 11:57:20
5楼: 一号车
此帖子包含附件:
JPEG 图像
大小:377.6K
----------------------------------------------
-
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2018/9/12 11:57:40
6楼: 一号内部
此帖子包含附件:
JPEG 图像
大小:252.7K
----------------------------------------------
-
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2018/9/12 12:05:01
7楼: 第二台
此帖子包含附件:
JPEG 图像
大小:350.9K
----------------------------------------------
-
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2018/9/12 12:05:22
8楼: 两兄弟
此帖子包含附件:
JPEG 图像
大小:256.1K
----------------------------------------------
-
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2018/9/12 12:05:46
9楼: ESP8266EX,自己焊接的简易开发板。哈哈
此帖子包含附件:
JPEG 图像
大小:248.7K
----------------------------------------------
-
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2018/9/12 12:31:27
10楼: 很多朋友都说我买台遥控车几十块不就行了,何必大费周章搞那么多事。

其实我希望在做的过程中小孩对这些感兴趣,然后进一步学习单片机的控制。
所以我配置了最简单的51单片机最小系统,简单入门,而且通过IO控制LED灯是最直观。

上面这堆东西其实也不会浪费,等小孩慢慢长大,肯定会有用的。
我嘛,也将近40岁了,小时候没有条件,现在倒可以老顽童一下,哈哈。
----------------------------------------------
-
作者:
男 caoweizhong123 (青秋) ★☆☆☆☆ -
盒子活跃会员
2018/9/12 14:16:03
11楼: 这玩意多少钱?
----------------------------------------------
学习拉!
作者:
男 lsh341999 (虫子) ★☆☆☆☆ -
普通会员
2018/9/12 14:20:08
12楼: 这东西好玩,哪有卖,发个地址过来
----------------------------------------------
就怕想不到,没有做不到的
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2018/9/12 14:26:32
13楼: 楼主,建议你开个网店。
买小车,送源码。
上位机或者说控制端,一律用 DELPHI 写。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2018/9/12 15:42:05
14楼: @caoweizhong123 (青秋)
@lsh341999 (虫子)
虽然是做来玩得,但是也是一件很辛苦的事情。

上面所有东西都在淘宝上散件购买的,如果您有点电子的知识不难找。
如果您没有电子知识,我觉得您应该买套件,而不是散件。但话又说回来了,都买了套件,就好像拼装积木一样了,还有意思吗?

我两台车都是散件购买,大约花了2000元不到吧。
但是现在如果叫我在做的话,成本就非常低了,比如投资的工具都几百块了。
简单说下:
1.先去买一台全淘宝最便宜的玩具车(平底,空间大,最好长度30厘米以上)。这个只是为了要它的外壳,如果不要外壳的就不需要购买了。
2.画图。用尺子量好原底盘尺寸,绘制图纸,然后加上电机位置开孔尺寸等等
3.购买一块足够大的1060纯铝板2mm厚度,打印图纸,贴在上面,然后用线锯,锯出来。用台钻打孔。
4.打磨,把所有边边角角磨圆滑,再用细砂纸打磨后用手喷漆喷
5.安装电机,轮子,单片机,通信模块,电池,led灯,激光发射器,喇叭等
   这里提醒一下单片机或通信模块的IO口输出电流能力有限,直接点亮个LED还可以,但亮度还是好低,需要采用NPN或PNP三极管把IO口作为控制相应负载的电源开关。
6.下位机编程,通信模块编程,上位机编程。
----------------------------------------------
-
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2018/9/12 15:46:18
15楼: 工具
此帖子包含附件:
JPEG 图像
大小:462.9K
----------------------------------------------
-
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2018/9/12 15:47:50
16楼: 底板
此帖子包含附件:
JPEG 图像
大小:397.7K
----------------------------------------------
-
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2018/9/12 15:48:40
17楼: 喷漆
此帖子包含附件:
JPEG 图像
大小:342.3K
----------------------------------------------
-
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2018/9/12 15:57:42
18楼: 补充一下,其实电子零件都是很便宜,可能运费比零件还贵呢,如:
51单片机最小系统 6元左右
EPS8266EX 10元左右
三洋18650 2300毫安拆机电池 7元左右
TT电机+轮胎 6元左右

如果大家想玩,建议底盘,电机和轮胎,直接买亚克力板底盘套装,好像才30元以内。剩下的单片机,驱动模块,通信模块就买散件。
别像我一样,什么都自己做,虽然金属底盘耐玩,但是需要的工具和费用又多,而且累死。
----------------------------------------------
-
作者:
男 xhl (xhl) ★☆☆☆☆ -
盒子活跃会员
2018/9/13 22:45:46
19楼:  nickemma (N.E) 有 
FMX  INDY TIdTCPClient 数据接收 列子吗?
----------------------------------------------
-
作者:
男 hujiacheng ( 旺财) ★☆☆☆☆ -
普通会员
2018/9/14 15:11:10
20楼: 8266好玩  派 也是! 他们用派 做车。。我想不明白。。。。。。。。。。
----------------------------------------------
免费的FTPhttps://download-installer.cdn.mozilla.net/pub/firefox/releases/43.0/win64/zh-CN/https://cc.embarcadero.com/Author/575019>http://delphi-z.ruhttps://download-installer.cdn.mozilla.net/pub/firefox/releases/43.0/win64/zh-CN/https://cc.embarcadero.com/Author/575019>http://delphi.icm.edu.pl/ftp/https://download-installer.cdn.mozilla.net/pub/firefox/releases/43.0/win64/zh-CN/https://cc.embarcadero.com/Author/575019>http://delphi-z.ruhttps://download-installer.cdn.mozilla.net/pub/firefox/releases/43.0/win64/zh-CN/https://cc.embarcadero.com/Author/575019
作者:
男 hnxxcxg (咏南中间件) ★☆☆☆☆ -
盒子活跃会员
2018/9/17 11:02:38
21楼: 网络传输最好用TBytes或TStream(其实也是TBytes),原汁原味地传送数据,不要搞什么编码、解码。速度还是最快的。
----------------------------------------------
中间件QQ群: 92449782 博客: http://www.cnblogs.com/hnxxcxg/
作者:
男 edwinyeah (Edwin) ★☆☆☆☆ -
盒子活跃会员
2018/9/17 12:02:59
22楼: 收藏!等儿子们再大一点也想引导他们玩这个学学编程。
----------------------------------------------
-
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2018/9/17 12:39:56
23楼: @xhl (xhl)
网上一搜一大堆啊。另外我更新的WiFiCai上位机程序,就是利用Indy TcpClient来接收、解码MJPEG流。

@hujiacheng ( 旺财)
其实我也想过用树莓派做车,但是成本太贵。
树莓派做车适合年龄大的小孩,或者智能开发公司,因为里面好多py的开源库,非常方便。比如可以做人脸识别,物体识别等等。就说无人车,智能物流机器人吧,树莓派来可以用来做原型测试。如果用单片机,根本做不来。

@hnxxcxg (咏南中间件)
您说的我都知道,如果上位机,下位机全部自己开发还可以这样做。但是前面也说了,我有两台车,一台是全部自己开发,另外一台是购买的整合单片机(含单片机,驱动模块,PWM舵机等等),所以我要兼容它的指令。
----------------------------------------------
-
作者:
男 unique20102003 (小马) ★☆☆☆☆ -
普通会员
2018/9/18 11:10:51
24楼: 请问我没有单片机方面的知识,只有编程方面的知识,也想给儿子捣鼓这个。楼主有什么建议啊?
----------------------------------------------
-
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2018/9/18 12:12:07
25楼: @unique20102003 (小马)

1、一套小车底盘(两块有机玻璃胶片、4个电机、4个轮胎) 大概30元左右
https://item.taobao.com/item.htm?spm=a230r.1.14.20.43314643aRcRmE&id=20088336267&ns=1&abbucket=11#detail

电子零件可以在这里购买(我的也在这里购买的):https://dianzi.taobao.com
2、51单片机最小系统(可以不需要,直接NODEMCU可以通过IO接L298N)
   L298N电机驱动模块
   DC-DC电源转换模块(12V转3.3v)
   杜邦连接线等
   数字万用表、电络铁、焊锡、螺丝刀等工具
   大概50元

3、直接买12v锂电池 4400毫安 + 充电器 大概100元
   用12v小车会狠一点,我的两节18650x2只有7.2v,做四区有点吃力

4、NodeMCU,自带了ESP8266EX芯片,已引出全部引脚

5、USB转TTL 串口模块(用来调试单片机或NodeMcu)

好了,剩下了就是组装,没有电子知识的,需要特别注意是“接电”,先用万用表量好电压、区分正负极。
最后就是写程序了,NODEMCU写TCP SERVER非常简单,网上一大堆。控制端可以用我的APP。

以上是最小系统的最快速入门。等熟悉后,可以上OPENWRT路由接USB摄像头、超声波测距、红外探测等等模块。
----------------------------------------------
-
作者:
男 unique20102003 (小马) ★☆☆☆☆ -
普通会员
2018/9/18 12:59:28
26楼: @nickemma
谢谢。我是在google+ 上看到的。您的这个方案还被老外赞扬了呢。

These is a cool project by one of my fellow Chinese Delphi programmers called nickemma (see original links at the end of the post) I came across today that I couldn't resist to share with the world:

Picture 1
===
The electronic car that receives control commands through WIFI, sent from an Android app developed in Delphi.

Picture 2
===
The FireMonkey app that sends hex. control commands to the toy car.BTW, it uses an UI framework called OrangeUI that's available in China only.

Picture 3
===
The settings window of the Android app where you specify the IP of the toy car's WIFI modue, the hex. commands for turning left/right, forward and back, and so on.

Picture 4/5
===
He made two toy cars each of which are differently constructed, but seems to be controlled by the same Delphi-powered Android app. I don't know much about the electronic thing, but this project obviously shows a cool part of Delphi :)
----------------------------------------------
-
作者:
男 shystep (shys) ★☆☆☆☆ -
普通会员
2018/9/23 12:09:43
27楼: 标记备查
----------------------------------------------
-
作者:
男 ww66 (wzs) ★☆☆☆☆ -
普通会员
2018/9/23 21:38:57
28楼: 标记备查
----------------------------------------------
http://www.inteLw.cn:8077
作者:
男 vga (vga) ★☆☆☆☆ -
盒子活跃会员
2018/9/24 8:20:00
29楼: 赞呀!!!!
----------------------------------------------
-
作者:
男 l_wming (L_Wming) ★☆☆☆☆ -
普通会员
2020/2/28 8:39:44
30楼: 楼主威武!!!
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2020/3/1 18:50:16
31楼: 现在国内大的物联网公司出品的物联网控制模组,大多是用 8266 做的。包括小米。

至于 TCP 连接,Indy 足够用,也很好用。

用 Indy,因为它是阻塞模式,如果网络不好发不动,就可能冻结程序界面。因此可以把发送和接收,放到线程里面去。对于现在的 Delphi 无需专门写一个 TThread 的继承代码,直接把收发代码放进 TTask.Run() 里面就可以了。

如果网络不好,发送失败,Indy 会出异常。因此这里需要做 try..except.. 捕获异常,然后断开重连。

我用 Indy 做的 APP 遥控无人机,可以控制到100米外。当然那是无人机上的 WiFi 模块比较好,可以距离远还能连上。
----------------------------------------------
-
作者:
男 xzhifei (xzhifei) ★☆☆☆☆ -
盒子活跃会员
2020/5/8 17:40:51
32楼: 这个厉害了,很有意思
----------------------------------------------
-
作者:
男 smartdata (Jack) ★☆☆☆☆ -
普通会员
2020/5/9 23:54:00
33楼: MARK
----------------------------------------------
==========
作者:
男 kentty (kentty) ★☆☆☆☆ -
普通会员
2020/5/10 9:29:02
34楼: LZ是不是对TIdTcpClient有误解? 
TIdTcpClient.IOHandler.Write(TIdBytes) (具体方法名可能有出入)

现在又是hextostring,又是encode啥的,接收以后还要反向转码一遍,多蛮烦 :)

btw,小车真不错,动手能力大赞。

智能小车TB有各种散件,包括车架,马达,轮子,马达驱动,各种传感器,我前年用arduino搭了一套给小孩玩,可以自动避障,小孩乐坏了 😄
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行2119.141毫秒 RSS